密钥对生成器规格自 API 23 起已弃用。您如何处理此警告?
示例代码:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpg.initialize(new KeyPairGeneratorSpec.Builder(context).build());
Per the 文档,您应该使用 KeyGenParameterSpec 代替。例如(对于 RSA 签名密钥):
KeyPairGenerator kpg = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
kpg.initialize(new KeyGenParameterSpec.Builder(
"mykey", KeyProperties.PURPOSE_SIGN)
.setDigests(KeyProperties.DIGEST_SHA256)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PSS)
.build());
需要设置摘要和填充模式的附加选项。这是因为,遵循良好的加密安全实践,AndroidKeyStore 现在将密钥的使用方式(签名与解密、摘要和填充模式等)锁定到指定的集合。如果您尝试以创建密钥时未指定的方式使用密钥,则会失败。如果您的设备有安全硬件,则此故障实际上是由安全硬件强制执行的,因此即使攻击者获得了设备的 root 权限,密钥仍然只能以定义的方式使用。
KeyGenParameterSpec 还支持创建 ECDSA、AES 和 HMAC 密钥,并允许您对密钥的使用方式设置其他限制。例如,如果您使用setUserAuthenticationRequired
方法,除非用户在场验证自己的身份,否则将无法使用密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)