因项目需求,需要用到AES加密解密,但在运行时 sr = SecureRandom.getInstance(SHA1PRNG, "Crypto"); 出现了异常:java.security.NoSuchProviderException: no such provider: Crypto,原因是在Android 7.0以上没有"Crypto"。
解决方法:
我们需要自己写一个类:
public static class CryptoProvider extends Provider {
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");
}
}
然后把代码中的:
sr = SecureRandom.getInstance(SHA1PRNG, "Crypto");
替换为:
sr = SecureRandom.getInstance(SHA1PRNG, new CryptoProvider());