网站关键词排名下降做网站 360的好不好

news/2025/9/27 14:31:07/文章来源:
网站关键词排名下降,做网站 360的好不好,网站和官网有区别吗,WordPress哪些主题是免费的一、KeyStore描述 在 Android 开发中#xff0c;KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息#xff0c;如密钥对、数字证书等#xff0c;以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL…一、KeyStore描述 在 Android 开发中KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息如密钥对、数字证书等以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL 连接等场景。 Android 开发中使用 KeyStore 的常见场景 存储密钥对可以使用 KeyStore 来生成和存储公钥和私钥的密钥对。这些密钥对通常用于数据加密、数字签名等操作。 存储数字证书可以使用 KeyStore 来存储数字证书用于验证身份、建立安全连接等场景。 安全存储密码可以使用 KeyStore 来安全地存储密码、凭证、API 密钥等敏感信息以防止它们被未授权的应用或攻击者访问。 TLS/SSL 连接可以使用 KeyStore 来管理客户端证书和受信任的 CA 证书用于安全通信、建立 TLS/SSL 连接等操作。 双因素身份验证可以使用 KeyStore 来存储和管理双因素身份验证所需的密钥和证书用于提高身份验证的安全性。 在 Android 中KeyStore 是通过 java.security.KeyStore 类来实现的。可以使用该类来创建、加载、存储和检索密钥和证书。Android 提供了特定于 Android 平台的 KeyStore 实现称为 AndroidKeyStore它提供了更高级的安全功能如硬件支持、密钥链随机生成等。 二、KeyStore使用 // 密钥库类型 private const val PP_KEYSTORE_TYPE AndroidKeyStore // 密钥库别名 private const val PP_KEYSTORE_ALIAS pp_keystore_alias // 加密算法标准算法名称 private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding 1. 生成公私钥密钥对 /*** 触发生成密钥对.* * 生成RSA 密钥对包括公钥和私钥** return KeyPair 密钥对包含公钥和私钥*/private fun generateKey(): KeyPair {// 创建密钥生成器val keyPairGenerator KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA,PP_KEYSTORE_TYPE)// 配置密钥生成器参数KeyGenParameterSpec.Builder(PP_KEYSTORE_ALIAS,KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1).setDigests(KeyProperties.DIGEST_SHA256).build().run {keyPairGenerator.initialize(this)}// 生成密钥对return keyPairGenerator.generateKeyPair()} 通过上述代码使用“AndroidKeyStore”类型的密钥库生成 RSA 密钥对包括公钥和私钥。 后续针对数据的加密和解密就需要使用此时密钥库中生成的 公钥和私钥。 2. AndroidKeyStore 密钥库得到密钥对 公钥 /*** 获取公钥.** return 公钥*/private fun getPublicKey(): PublicKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().public}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.certificate.publicKey} 私钥 /*** 获取私钥.** return 密钥*/private fun getPrivateKey(): PrivateKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().private}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.privateKey} 3. 加密、解密 加密 /*** 数据加密.** param data 原始数据字符串* return 加密数据字节数组*/fun encryptData(data: String): ByteArray {return encryptDataInternal(data.toByteArray())}/*** 数据加密.** param bytes 原始数据* return 加密数据*/private fun encryptDataInternal(bytes: ByteArray): ByteArray {return getPublicKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.ENCRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()} 解密 /*** 数据解密.** param bytes 加密数据* return 原始数据字符串*/fun decryptData(bytes: ByteArray): String {return String(decryptDataInternal(bytes))}/*** 数据解密.** param bytes 加密数据* return 原始数据*/private fun decryptDataInternal(bytes: ByteArray): ByteArray {return getPrivateKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.DECRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()} 描述下Cipher对象参数 Cipher.getInstance(String transformation) 是用于获取 Cipher 对象的静态方法。它接受一个字符串参数 transformation该参数指定了要使用的加密算法、模式和填充方式 transformation 参数的格式通常为 algorithm/mode/padding其中 algorithm指定加密算法的名称如 AES、DES、RSA 等。mode指定加密模式如 ECB、CBC、CTR 等。padding指定填充方式如 PKCS5Padding、NoPadding 等。 例如我们当前工具类要使用 RSA 算法、ECB 模式和 PKCS5Padding 填充方式进行加密你可以使用如下的 transformation 参数 private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding 然后调用 Cipher.getInstance(transformation) 方法来获取对应的 Cipher 对象用于执行加密和解密操作。 在 Android 中常见的加密算法和模式包括 加密算法AES、DES、RSA 等。加密模式ECB、CBC、CTR、GCM 等。填充方式PKCS5Padding、NoPadding 等。 提示正常我们需要对加密的数据进行本地存储上述加密数据是ByteArray字节数组不太适合本地存储因此我们可以通过Base64将ByteArray数据转换为字符串进行保存取出数据之时再做Base64解码。 // ByteArray转Base64字符串 Base64.encodeToString(encryptedBytes, Base64.DEFAULT)// Base64字符串转ByteArray Base64.decode(encryptedString, Base64.DEFAULT) 到此为止基本的使用和简单的参数描述已经完成。 4. 完整代码 object KeyStoreHelper {// 密钥库类型private const val PP_KEYSTORE_TYPE AndroidKeyStore// 密钥库别名private const val PP_KEYSTORE_ALIAS pp_keystore_alias// 加密算法标准算法名称private const val PP_TRANSFORMATION RSA/ECB/PKCS1Padding/*** 数据加密.** param data 原始数据字符串* return 加密数据字节数组*/fun encryptData(data: String): ByteArray {return encryptDataInternal(data.toByteArray())}/*** 数据解密.** param bytes 加密数据* return 原始数据字符串*/fun decryptData(bytes: ByteArray): String {return String(decryptDataInternal(bytes))}/*** 数据加密.** param bytes 原始数据* return 加密数据*/private fun encryptDataInternal(bytes: ByteArray): ByteArray {return getPublicKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.ENCRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()}/*** 数据解密.** param bytes 加密数据* return 原始数据*/private fun decryptDataInternal(bytes: ByteArray): ByteArray {return getPrivateKey()?.run {val cipher Cipher.getInstance(PP_TRANSFORMATION)cipher.init(Cipher.DECRYPT_MODE, this)cipher.doFinal(bytes)} ?: byteArrayOf()}/*** 获取公钥.** return 公钥*/private fun getPublicKey(): PublicKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().public}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.certificate.publicKey}/*** 获取私钥.** return 密钥*/private fun getPrivateKey(): PrivateKey? {val keyStore KeyStore.getInstance(PP_KEYSTORE_TYPE).apply {load(null)}// 判断密钥是否存在if (!keyStore.containsAlias(PP_KEYSTORE_ALIAS)) {return generateKey().private}val entry keyStore.getEntry(PP_KEYSTORE_ALIAS, null)if (entry !is KeyStore.PrivateKeyEntry) {return null}return entry.privateKey}/*** 触发生成密钥对.** 生成RSA 密钥对包括公钥和私钥** return KeyPair 密钥对包含公钥和私钥*/private fun generateKey(): KeyPair {// 创建密钥生成器val keyPairGenerator KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA,PP_KEYSTORE_TYPE)// 配置密钥生成器参数KeyGenParameterSpec.Builder(PP_KEYSTORE_ALIAS,KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1).setDigests(KeyProperties.DIGEST_SHA256).build().run {keyPairGenerator.initialize(this)}// 生成密钥对return keyPairGenerator.generateKeyPair()} } 参考 1. Android 密钥库系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

章丘网站优化美工培训班费用一般多少

这个是把<>过滤掉了所以只能用js的事件 ?weya"onfocus"alert(1337)" autofocus"

网站厨师短期培训班做网站实训心得

简单工厂模式、工厂模式和抽象工厂模式都是创建型设计模式&#xff0c;它们之间在目的、实现方式和适用场景上存在显著的区别。以下是对这三种模式的详细比较&#xff1a; 一、定义与目的 简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 定义&#xff1a; 简单工…

STM32定时器(寄存器与HAL库实现) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微前端中iframe集成方式与应用微前端框架方式对比

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

配置RedisTemplate序列化机制

在Spring Boot应用程序中配置 RedisTemplate以实现特定序列化机制时,关键是要确保数据在保存到Redis时将Java对象转换成合适的格式,同时在读取时能够正确地将数据转换回Java对象。RedisTemplate提供了灵活的方式来自…

优化器(Optimizer)

优化器(Optimizer)是深度学习和机器学习中最核心的组件之一。 简单来说,优化器的作用就是指导模型如何学习。它决定了在反向传播计算出梯度(模型应该朝哪个方向调整)之后,模型应该以多大的“步伐”和什么样的方式…

为第三方网站做推广合肥seo排名扣费

打开题目 点击1到5号的结果 1号 2号 3号 4号 5号 这里直接令传入的id6 传入id1^1^1 逻辑符号|会被检测到&#xff0c;而&感觉成了注释符&#xff0c;&之后的内容都被替换掉了。 传入id1|1 直接盲注比较慢&#xff0c;还需要利用二分法来编写脚本 这里利用到大佬的脚…

阿里虚拟主机怎么做两个网站公司宣传折页模板

为了实现Windows主机与Linux服务器之间的资源共享&#xff0c;Linux操作系统提供了Samba服务&#xff0c;Samba服务为两种不同的操作系统架起了一座桥梁&#xff0c;使Linux系统和Windows系统之间能够实现互相通信&#xff0c;为广泛的Linux爱好者提供了极大方便。本文简要介绍…

2025 年气动离合器品牌推荐排行榜发布,聚焦博得 PLC 控制技术与降本优势,常开式气动离合器,多片式气动离合器,气动离合器电磁阀,气动离合器气缸,单片式气动离合器工厂推荐

在矿山、冶金、水泥等重型工业领域,气动离合器作为关键传动设备,直接影响着磨矿机等大型机械的运行稳定性与成本控制。当前行业普遍面临三大痛点:大功率电动机启动时的巨大电流易冲击电网,导致电力系统波动;“大马…

Kubernetes Ingress与OpenShift Router的比较分析

Kubernetes Ingress和OpenShift Router都是用于管理外部访问集群内服务的资源,但它们在设计理念、功能特性和使用场景上存在一些差异。 Kubernetes Ingress是一个API对象,它定义了外部访问到集群服务的规则。Ingress…

我国做民宿的网站网页qq登录保护功能怎么关闭

解决方法&#xff1a; 下载 sqlite3.exe 在你的清理失败的路径下查看.svn目录下是否存在一个wc.db文件&#xff0c;把解压好的sqlite3.exe 放在wc.db文件的同一路径下 注意&#xff1a;主要是用sqlite3.exe清理掉wc.db中的相关信息。 通过cmd命令行进入你清理失败的路径&am…

Kubernetes日志管理:使用Loki进行日志采集

在Kubernetes环境中,日志管理是一项关键的运维任务,它帮助开发者和系统管理员监控应用程序的运行状态、诊断问题并确保系统安全。Loki是一个水平可扩展、高可用性、多租户的日志聚合系统,由Grafana Labs开发。它特别…

PySimpleGUI 4.60.5完整控件列表

根据PySimpleGUI 4.60.5官方文档及权威技术博客整理,以下是完整控件列表及示例:序号 控件名 用途 示例1 Text 显示静态文本 sg.Text(欢迎使用, key=-TEXT-)2 Input 单行文本输入 sg.Input(key=-INPUT-, size=20)3 Bu…

深入解析:Go基础:模块化管理为什么能够提升研发效能?

深入解析:Go基础:模块化管理为什么能够提升研发效能?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

无锡网站定制宝塔面板怎么做自己的网站

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

2025黄鹤杯线上wp

2025黄鹤杯线上赛 Web Code <?php highlight_file(__FILE__); include("aid.php"); if(!(isset($_GET["input1"]) && isset($_GET["input2"]) && isset($_GET[&quo…

一条频率信道是什么?

一条频率信道是什么?无线信号的传输,依赖 “电磁波的频率变化” 来承载信息(如调幅 AM、调频 FM、数字调制 QPSK 等)。而任何承载信息的电磁波,都不可能只占用 “一个频率点” —— 它必然会 “占用一段连续的频率…

Dropout

Dropout(丢弃法)是一种在神经网络训练中广泛使用的正则化(Regularization)技术。它的主要作用是防止模型在训练集上过拟合(Overfitting),从而提高模型在未见过数据(测试集)上的泛化能力。Dropout 类的作用和工…

免费做的英文网站微信 小程序

作者 | 百度搜索用户体验中心 《Web设计指南》分为设计原则、基础规范两方面主要内容&#xff0c;同时会提供相应的实际案例及资源下载。关注OpenWeb开发者&#xff0c;回复“设计指南”&#xff0c;即可获取已发布资源。 设计原则之高级精致 简洁并不等于粗糙没有细节&#x…

经典排序算法深度解析 - 实践

经典排序算法深度解析 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…