android - 如何使用“AndroidKeyStore”提供程序生成唯一的 rsa 密钥对(2048)?
问题描述
我的 Android 应用程序中有此代码用于生成 RSA 密钥对。此代码在某些设备上的 Android 8 上生成相同的密钥对。设备包括联想 K8、诺基亚 3。
只有在这些设备上,生成的密钥对在相同型号中是相同的。如果我不使用 AndroidKeyStore Provider 而是使用 BouncyCastle,则密钥是唯一的。但我想使用 android 提供程序并且仍然生成唯一的密钥。
KeyPairGenerator keyPairGenerator = null;
try {
keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder("somealias", KeyProperties.PURPOSE_SIGN)
.setDigests(KeyProperties.DIGEST_SHA256)
.setKeySize(2048)
.build();
keyPairGenerator.initialize(spec);
} catch(Exception e) {
throw new KeyStoreException(e);
}
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
byte[] encodedP = publicKey.getEncoded();
每次都需要在所有设备上获取唯一的密钥。
使用这行代码连续两次运行 encodeP 的 Base64 编码值:
String basePub = Base64.getEncoder().encodeToString(encodedP);
运行#1
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9RmCTb9FJG8rS9ldKiLQsQ7wNtKMvr8aLB+5V7VlNxKkL14ZE+gBMbsHg0QNEL7SL+UiorDeHT5gMg1pHQrq/dJY8WehjXmOsjol8DZaX0qsOLKAqCP0mYK90OjbyZOoGNs7qq7crtSv+oF8aDFzUcTbx/SghEQM9ZjGXSgckpPUsMX3zzf3cZvwZPbTG6y9qAR43nlEAIRaeAPtz8hh/FunW5UeXajsHpyoD9im4HRgm3OzoZYdHXd6kSy1eCmqNJ4DzVmq9EVpX5YTBb3RqeADk7pVGck+eJK4d91Vk5cdsykX6ITCfQwFi1duywHkAZjIG6lXxsTW1HoC96qIfwIDAQAB
运行#2
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9RmCTb9FJG8rS9ldKiLQsQ7wNtKMvr8aLB+5V7VlNxKkL14ZE+gBMbsHg0QNEL7SL+UiorDeHT5gMg1pHQrq/dJY8WehjXmOsjol8DZaX0qsOLKAqCP0mYK90OjbyZOoGNs7qq7crtSv+oF8aDFzUcTbx/SghEQM9ZjGXSgckpPUsMX3zzf3cZvwZPbTG6y9qAR43nlEAIRaeAPtz8hh/FunW5UeXajsHpyoD9im4HRgm3OzoZYdHXd6kSy1eCmqNJ4DzVmq9EVpX5YTBb3RqeADk7pVGck+eJK4d91Vk5cdsykX6ITCfQwFi1duywHkAZjIG6lXxsTW1HoC96qIfwIDAQAB
解决方案
推荐阅读
- google-apps-script - Google AppScript 中 PDF 的 OCR 无法正常工作
- python - 使用特定的 python 版本创建 conda env,并预先下载该 python 包
- html - 嵌入样式何时优先于链接或导入的样式?
- elasticsearch - Elasticsearch 索引测量单元有和没有空格一致
- android - 如何在 Android AVD 中访问使用 USB 连接的网络摄像头
- ios - iOS 14 损坏的动画
- python - 在这个数据框中会调用什么日期?
- java - 爪哇 || varArr[i] = varInt 后数组元素设置为 0
- couchbase - 对数组的重复键值进行分组并在 N1QL 中显示计数
- python - Django 和 Stripe,模块 'stripe' 没有 'Customer' 成员