KeyStore
KeyStore 是Java的一种加密存储库,用于存储和管理加密密钥和证书,可参照Android密钥库。它可以在各种应用和系统中使用,用于保护敏感数据和确保安全通信。KeyStore 通常使用非对称加密算法,如 AES、RSA 等来保护存储的密钥和证书,以确保其机密性和完整性。
KeyStore 的主要用途:
- 存储和保护加密密钥:存储各种加密密钥,包括对称密钥和非对称密钥。这些密钥可以用于加密和解密数据,确保数据的安全传输和存储。
- 存储和保护数字证书:存储和保护数字证书,包括公钥证书和私钥证书。数字证书可以用于身份验证和加密通信,确保通信双方的身份和数据的安全性。
- 管理密钥和证书:提供了便的密钥和证书管理功能,允许用户创建、删除和备份密钥和证书。这有助于确保密钥和证书的安全管理,防止丢失或泄露。
- 加密敏感数据:与各种应用和系统集成,用于加密敏感数据。通过加密,可以防止未经授权的访问和数据泄露,确保数据的机密性。
- 实现安全通信:实现安全通信,例如在客户端和服务器之间建立安全通道。通过使用加密算法和数字证书,可以确保通信双方的身份和数据的安全性。
KeyStore的使用
alias为KeyStore的别名,是唯一的标识,后续获取到KeyStore也要用到。
1.构建keyStone
private fun getKeyGenerator(alias: String): KeyGenerator {
// 第一个参数指定加密算法,第二个参数指定Provider
val keyGenerator = KeyGenerator.getInstance("AES", "AndroidKeyStore")
val parameterSpec = KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT //用于加密和解密
)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC) // AEC_CBC
.setUserAuthenticationRequired(false) // 是否需要用户认证
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) //AES算法的PADDING, 和前面的AESUtil里保持统一
.build()
keyGenerator.init(parameterSpec)
return keyGenerator
}
2.生产KeyStore后,就可以生产Key了
val key: SecretKey = getKeyGenerator("myKey").generateKey()
3.从KeyStore获取Key
fun getKeyFromKeyStore(alias: String): SecretKey? {
// 参数为Provider
val keyStore = KeyStore.getInstance("AndroidKeyStore")
// 要先初始化
keyStore.load(null)
// 获取KeyStore中的所有Key的别名
val aliases = keyStore.aliases()
// KeyStore里没有key
if (!aliases.hasMoreElements()) {
return null
}
// Key的保护参数,这里为不需要密码
val protParam: KeyStore.ProtectionParameter =
KeyStore.PasswordProtection(null)
// 通过别名获取Key
val entry = keyStore.getEntry(alias, protParam) as KeyStore.SecretKeyEntry
return entry.secretKey
}
到这里就已经拿到了你的key,就可以去进行解密验证数据了