2016-03-20 35 views
4

Şifreleme ve şifre çözme için bir Cipher nesnesini başlatmaya çalışıyorum.AndroidKeystore NoSuchAlgorithm exception

String cipher = privateKey.getAlgorithm() + "/ECB/PKCS1Padding"; 
     mCipher = Cipher.getInstance(cipher, "AndroidKeyStore"); 

Ben robot üzerinde aşağıdaki özel almaya devam: normalde kendi sağlayıcı yüklemelerini engelledi BouncyCastle bir hata var

System.err: java.security.NoSuchAlgorithmException: Provider AndroidKeyStore does not provide RSA/ECB/PKCS1Padding 
    03-20 00:28:38.270 19817 21488 W System.err:  at javax.crypto.Cipher.getCipher(Cipher.java:357) 
    03-20 00:28:38.270 19817 21488 W System.err:  at javax.crypto.Cipher.getInstance(Cipher.java:325) 
    03-20 00:28:38.271 19817 21488 W System.err:  at javax.crypto.Cipher.getInstance(Cipher.java:297) 

cevap

7

Google'a göre, bu yüzden yüklerken onlar sağlayıcı adını AndroidKeyStoreBCWorkaround kullanılan AndroidKeyStore tuşları ile ilgili algoritmalar. See AOSP source here.

Aşağıdaki kod Marshmallow aracılığıyla KitKat'ta çalışır, ancak Google, artık gerekli değildir onlar-etrafında işi ortadan kaldıracağını söyledi beri bunu önermiyoruz: Yerine kullanmak

Cipher.getInstance("RSA/ECB/PKCS1Padding", "AndroidKeyStoreBCWorkaround"); 

özel anahtar Şifreleme, Şifreleme sınıf doğru uyumlu Cipher bulacaksınız almak için:

KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); 
ks.load(null); 

KeyStore.PrivateKeyEntry keyEntry = 
     (KeyStore.PrivateKeyEntry) ks.getEntry("mykeypair", null); 
PrivateKey privKey = keyEntry.getPrivateKey(); 

Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
c.init(Cipher.ENCRYPT_MODE, privKey); 
byte[] cipherText = c.doFinal(clearText, 0, clearText.length); 
+0

benim için çalıştı, teşekkür – issamux

+1

DAC84 logcat, stacktrace ve kod parçası ile yeni bir soru sor @. – satur9nine