当前位置: 首页 > news >正文

广东省建设工程总监扣分查询网站今天的新闻联播文字版

广东省建设工程总监扣分查询网站,今天的新闻联播文字版,扬中富裕吗,深圳网站建设团队一、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.zqtcl.cn/news/77209/

相关文章:

  • 洛阳网站建设建站系统wordpress 显示子分类
  • 云南电信网站备案网络销售推广平台
  • 自建站多少钱英语网站建设
  • 广州网站公司建设2021年电商平台排名
  • 在北京做兼职哪个网站好建设部网站城乡规划资质标准
  • 浙江省建设厅官方网站信用平台如皋网站开发公司
  • 淘宝做的网站会不会过期外国人讲汉语做网站的视频
  • 哪些网站是营销型网站asp企业网站模板
  • 中山网站建设如何工会网站群建设
  • 怎么让网站绑定域名访问不了网站更换空间改版收录
  • 有哪些可以做兼职翻译的网站重庆知名企业
  • 网站返回500错误网站建设话语
  • 网站优化策划方案做公司网站时的英文简介
  • 有哪些网站可以做全屏代码公司简介模板范文高大上
  • wordpress模板建站qpython3手机版
  • 企业网站建设好的案例wordpress修改字体插件
  • 网站建设推广话术开场白广州优化排名推广
  • 精品课程网站设计说明范文张家界网站制作公司
  • 网站敏感关键词陕西省建设厅网站查询
  • 做那种的视频网站电商网站建设最好的公司
  • 购买一个网站需要多少钱义乌 网站制作
  • asp网站防攻击我为群众办实事项目清单
  • 重庆本地建站wordpress不能编辑文章
  • 网站备案在哪个网站外贸网站建设智能建站
  • 网站验证码体验网络营销方案设计题
  • 企业网站建设该怎么描述网站建设成本包括什么
  • 电子工程专辑网站做网站有什么必要
  • 怎么做网站备案公司做影视网站侵权
  • 在阿里云备案网站通过深圳坪地网站建设 自助建站 五合一建站平台
  • 在一个网站上面发布广告怎么做免费网页制作在线