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 元素唯一的LinkedBlockingQueue阻塞队列
元素唯一的LinkedBlockingQueue阻塞队列
2
线上诊断神器BTrace快速入门
线上诊断神器BTrace快速入门
3
微信小程序自定义radio和checkbox样式
微信小程序自定义radio和checkbox样式
4
dubbo-admin编译及部署
dubbo-admin编译及部署
5
Redis 列表(List)
Redis 列表(List)
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。