Безопасность "Крипто" провайдера устарела в Android N
Пользователь запустил мое приложение в Android N, у него произошел сбой. Я знаю, что Google не поддерживает поставщика Crypto в Android N, но что может быть лучшим способом переноса старых зашифрованных данных.
1 ответ
Вы можете использовать этого провайдера, заменив "Crypto" на SecureRandom, он отлично работает для меня:
Использование,
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", new CryptoProvider());
вместо,
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");
и ваш класс CryptoProvider, как показано ниже,
import java.security.Provider;
/**
* Implementation of Provider for SecureRandom. The implementation supports the
* "SHA1PRNG" algorithm described in JavaTM Cryptography Architecture, API
* Specification & Reference
*/
public final 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");
}
}
Вы можете использовать этот код для провайдера:
SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").getProvider();