KeyStore

KeyStore

KeyStore 是Java的一种加密存储库,用于存储和管理加密密钥和证书,可参照Android密钥库。它可以在各种应用和系统中使用,用于保护敏感数据和确保安全通信。KeyStore 通常使用非对称加密算法,如 AES、RSA 等来保护存储的密钥和证书,以确保其机密性和完整性。

KeyStore 的主要用途:

  1. 存储和保护加密密钥:存储各种加密密钥,包括对称密钥和非对称密钥。这些密钥可以用于加密和解密数据,确保数据的安全传输和存储。
  2. 存储和保护数字证书:存储和保护数字证书,包括公钥证书和私钥证书。数字证书可以用于身份验证和加密通信,确保通信双方的身份和数据的安全性。
  3. 管理密钥和证书:提供了便的密钥和证书管理功能,允许用户创建、删除和备份密钥和证书。这有助于确保密钥和证书的安全管理,防止丢失或泄露。
  4. 加密敏感数据:与各种应用和系统集成,用于加密敏感数据。通过加密,可以防止未经授权的访问和数据泄露,确保数据的机密性。
  5. 实现安全通信:实现安全通信,例如在客户端和服务器之间建立安全通道。通过使用加密算法和数字证书,可以确保通信双方的身份和数据的安全性。

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,就可以去进行解密验证数据了

### 关于 Keystore 的创建、使用及常见问题解决方案 #### 创建 Keystore Keystore 是一种存储加密密钥和证书的安全容器。对于 Java 应用程序来说,通常会使用 `keytool` 工具来创建一个新的 keystore 文件。命令如下所示: ```bash keytool -genkeypair -alias myapp -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore app.keystore ``` 这条指令将会生成一个名为 `app.keystore` 的文件,并在里面创建一对新的公私钥[^1]。 #### 使用 Keystore 当应用程序需要访问 HTTPS 或者其他安全协议时,则可以通过编程方式加载这个 keystore 来获取其中保存的身份验证信息。下面是一个简单的例子展示如何通过代码读取并初始化一个已存在的 keystore 实例: ```java import java.security.KeyStore; // 加载默认类型的KeyStore实例 KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("path/to/your/file")) { char[] passwordArray = "password".toCharArray(); // 将输入流中的数据加载到trustStore对象里 trustStore.load(fis, passwordArray); } catch (Exception e) { System.out.println(e.getMessage()); } ``` 这段代码展示了如何利用 `KeyStore` 类的方法去加载指定路径下的 keystore 文件[^3]。 #### 解决 “Invalid keystore format” 错误 如果遇到了类似于 `"Invalid keystore format"` 这样的错误消息,在确认 keystore 文件确实存在并且格式无误的情况下,可以尝试删除旧版本的 keystore 并重新生成一份新副本;或者考虑是否存在不同平台之间的兼容性差异——比如某些情况下 Windows 上产生的 .jks 文件可能无法被 Linux 系统正确识别。另外值得注意的是,有时 IDE 缓存也可能导致此类问题的发生,因此清理缓存后再试一次往往能有所帮助[^4]。 为了更方便地管理和操作这些复杂的认证材料,还可以借助第三方工具如 **KeyStore Explorer** ,这是一款专门为管理各类形式的 keystore 设计的应用软件,提供了更加友好易用的操作界面[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周遭.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值