And*_*ade 1 java encryption android realm
我有一个Android应用程序要发布,今天尝试运行API 22的设备Moto G,我遇到了以下错误:
java.security.NoSuchAlgorithmException: 未找到KeyGenerator RSA 实现
众所周知,相同的应用程序在较新的设备API 23+上正常运行
查询Google文档,我发现自API +1以来支持AES算法,我不明白发生了什么.
有没有人遇到过这个问题?
顺便说一句,我正在尝试生成加密Realm数据的密钥.
private static final String KEYSTORE_PROVIDER_NAME = "AndroidKeyStore";
public void generateKeyInKeystore() {
final KeyGenerator keyGenerator;
try {
keyGenerator = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES,
KEYSTORE_PROVIDER_NAME);
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
throw new RuntimeException(e);
}
final KeyGenParameterSpec keySpec;
try {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
keySpec = new KeyGenParameterSpec.Builder(
KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setUserAuthenticationRequired(false)
.build();
keyGenerator.init(keySpec);
}
} catch (InvalidAlgorithmParameterException e) {
throw new RuntimeException(e);
}
keyGenerator.generateKey();
}
Run Code Online (Sandbox Code Playgroud)
嗯,根据Android官方开发人员指南,由于你的密码组合是"AES/CBC/PKCS7Padding",它支持API级别23+.由于您的应用程序使用API级别22运行,因此它不支持"AES/CBC/PKCS7Padding"Cypher.
如果您想支持以下API级别,请考虑使用其中一个密码"RSA/ECB/NoPadding"或"RSA/ECB/PKCS1Padding".他们确实支持API级别18+
在Android Keystore System官方指南中查找Cypher和KeyGenerator部分的更多详细信息.
| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |