Android AES加解密(兼容Android7.0)
Android 7.0及以上 AES
加密报错:
New versions of the Android SDK no longer support the Crypto provider.
原因在于生成 AES
加密密钥时,在 Axndroid N
上已经将相关的 Crypto provider
和 SHA1PRNG
算法同时废弃掉了,并计划在后续的 SDK 中完全移除相关的库。
增加 CryptoProvider 类
/**
* Aes密钥处理
* @param seed
* @return
* @throws Exception
*/
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance(AES);
//for android
SecureRandom sr = null;
// 在4.2以上版本中,SecureRandom获取方式发生了改变
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
sr = SecureRandom.getInstance(SHA1PRNG, "Crypto");
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
sr = SecureRandom.getInstance(SHA1PRNG, new CryptoProvider());
} else {
sr = SecureRandom.getInstance(SHA1PRNG);
}
// for Java
// secureRandom = SecureRandom.getInstance(SHA1PRNG);
sr.setSeed(seed);
kgen.init(128, sr); //256 bits or 128 bits,192bits
//AES中128位密钥版本有10个加密循环,192比特密钥版本有12个加密循环,256比特密钥版本则有14个加密循环。
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
// 增加 CryptoProvider 类
public static class CryptoProvider extends Provider {
/**
* Creates a Provider and puts parameters
*/
public CryptoProvider() {
super("Crypto", 1.0, "HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)");
put("SecureRandom.SHA1PRNG", "org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
put("SecureRandom.SHA1PRNG ImplementedIn", "Software");
}
}
Google 终极推荐
参考:[Android 7.0后加密库Crypto被废弃后填坑](http://www.appblog.cn/2018/08/09/Android 7.0后加密库Crypto被废弃后填坑/ "Android 7.0后加密库Crypto被废弃后填坑")
开源 AES加解密库
- java-aes-crypto:https://github.com/tozny/java-aes-crypto
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/11/android-aes-encryption-and-decryption-compatible-with-android-7/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
Android AES加解密(兼容Android7.0)
Android 7.0及以上 AES加密报错:
New versions of the Android SDK no longer support the Crypto provider.
原因在于生成 AES加密密钥时,在 Axndroid N 上……
文章目录
关闭
共有 0 条评论