Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

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被废弃后填坑