2016-08-03 10 views
4

Ich benutze Fingerabdruck sdk und es stürzt immer darauf ab.java.lang.RuntimeException: Fehler beim Initialisieren der Chiffre mit Fingerprint

java.lang.RuntimeException: Failed to init Cipher                        
at com.example.ammar.fingerbyitself.MainActivity.initCipher(MainActivity.java:160) 
at com.example.ammar.fingerbyitself.MainActivity.access$000(MainActivity.java:55) 
at com.example.ammar.fingerbyitself.MainActivity$1.onClick(MainActivity.java:109) 
at android.view.View.performClick(View.java:5697) 
at android.widget.TextView.performClick(TextView.java:10814) 
at android.view.View$PerformClick.run(View.java:22526) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7229) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Caused by: java.security.InvalidKeyException: Only SecretKey is supported 
at com.android.org.conscrypt.OpenSSLCipher.checkAndSetEncodedKey(OpenSSLCipher.java:435) 
at com.android.org.conscrypt.OpenSSLCipher.engineInit(OpenSSLCipher.java:260) 
at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:612) 
at javax.crypto.Cipher.tryCombinations(Cipher.java:532) 
at javax.crypto.Cipher.getSpi(Cipher.java:437) 
at javax.crypto.Cipher.init(Cipher.java:815) 
at javax.crypto.Cipher.init(Cipher.java:774) 
at com.example.ammar.fingerbyitself.MainActivity.initCipher(MainActivity.java:153) 
at com.example.ammar.fingerbyitself.MainActivity.access$000(MainActivity.java:55)  
at com.example.ammar.fingerbyitself.MainActivity$1.onClick(MainActivity.java:109)  
at android.view.View.performClick(View.java:5697)  
at android.widget.TextView.performClick(TextView.java:10814)  
at android.view.View$PerformClick.run(View.java:22526)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:158)  
at android.app.ActivityThread.main(ActivityThread.java:7229)  
at java.lang.reflect.Method.invoke(Native Method)  

Als ich CIPHERinit nennen()

private boolean initCipher() { 
     try { 
//   KeyStore mKeyStore = KeyStore.getInstance("AndroidKeyStore"); 
      mKeyStore.load(null); 
      SecretKey key = (SecretKey) mKeyStore.getKey(KEY_NAME, null); 
      mCipher.init(Cipher.ENCRYPT_MODE, key); 
      return true; 
     } catch (KeyPermanentlyInvalidatedException e) { 
      return false; 
     } catch (KeyStoreException | CertificateException | UnrecoverableKeyException | IOException 
       | NoSuchAlgorithmException | InvalidKeyException e) { 

      throw new RuntimeException("Failed to init Cipher", e); 
     } 
    } 

Warum stürzt, ist nicht klar, auch der gleiche Code arbeitet von GitHub heruntergeladen.

+0

die roo Ursache Siehe: Verursacht durch: java.security.InvalidKeyException: Es wird nur SecretKey unterstützt – Jens

+0

Ist 'mKeyStore.getKey (KEY_NAME, null)' 'Rückkehr null'? Das könnte dein Problem sein. Ist im AndroidKeyStore bereits ein Schlüssel mit diesem Alias ​​gespeichert? Wenn nicht, müssen Sie einen erstellen. – Bryan

+0

Haben Sie eine Lösung dafür? – androidnoobdev

Antwort

2

Ich bekam diesen Fehler, wenn die SecretKey ich ging an die init Funktion war eigentlich null.

Das sagte, ich habe eine Bibliothek für Fingerabdruck-Authentifizierung. Vielleicht möchten Sie ihm einen Schuss geben:

FingerprintDialog.initialize(this) 
    .title(R.string.title) 
    .message(R.string.message) 
    .callback(new FingerprintDialogCallback() { 
     @Override public void onAuthenticationSucceeded() {} 
     @Override public void onAuthenticationCancel() {} 
    }) 
    .show(); 

Fingerprint Library

Sie können wählen, CryptoObject verwendet wird oder nicht.

1

In FingerPrintDialog Beispiel gibt es eine createKey Methode, die den Schlüssel generiert. Nach dem Aufruf von createKey nur können Sie anrufen initCipher

Verwandte Themen