2016-08-03 38 views
4

我正在使用指紋sdk,並且它總是在其上崩潰。java.lang.RuntimeException:無法使用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)  

當我打電話CIPHERinit()

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); 
     } 
    } 

爲什麼它崩潰是不明確的,甚至相同的代碼工作從GitHub下載。

+0

見Roo的原因:java.security.InvalidKeyException:通過只造成SecretKey的支持 – Jens

+0

是'mKeyStore.getKey(KEY_NAME,空)''返回null'?這可能是你的問題。是否有一個存儲在''AndroidKeyStore'中的密鑰已經使用該別名?如果不是,你必須創建一個。 – Bryan

+0

你有沒有解決這個問題的方法? – androidnoobdev

回答

2

我正在收到這個錯誤,當我傳遞給init函數實際上是null

這就是說,我建立了一個指紋認證庫。你可能想給它一個鏡頭:

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

您可以選擇使用CryptoObject與否。

1

FingerPrintDialog示例中有一個生成密鑰的方法createKey。調用createKey後只有你可以調用initCipher

相關問題