Android AES加解密(兼容Android7.0)

Android 7.0及以上 AES加密报错:

New versions of the Android SDK no longer support the Crypto provider.

原因在于生成 AES加密密钥时,在 Axndroid N 上已经将相关的 Crypto providerSHA1PRNG 算法同时废弃掉了,并计划在后续的 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加解密库

上一篇 Fragment切换或回退时空白,RecyclerView提示 No adapter attached; skipping layout
下一篇 Android 7.0后加密库Crypto被废弃后填坑
目录
文章列表
1 Android NDK 开发使用 ANDROID_LOG 日志库
Android NDK 开发使用 ANDROID_LOG 日志库
2
Android Gradle配置Debug和Release参数的方法
Android Gradle配置Debug和Release参数的方法
3
Groovy代码示例 - JSON
Groovy代码示例 - JSON
4
腾讯企业邮箱配置图文教程
腾讯企业邮箱配置图文教程
5
Android Jetpack架构组件(一)了解JetPack组件
Android Jetpack架构组件(一)了解JetPack组件
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。