2016-08-08 8 views
-3

与えられたコードは、ユーザーが指定した128ビットのキー値でAES暗号化を使用します。私のAndroidプロジェクトでこのコードを使用しましたが、次のコードは正しく暗号化されますが、復号化時に例外(復号化のエラー)が表示され、残念ながらアプリケーションが停止します。ここでは、次のコード、AES解読エラー

import android.util.Base64; 
import android.util.Log; 
import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.Arrays; 
import javax.crypto.Cipher; 
import javax.crypto.spec.SecretKeySpec; 


public class AES { 

    static final String TAG = "SymmetricAlgorithmAES"; 

    private SecretKeySpec secretKey; 
    private byte[] key; 

    private String decryptedString; 
    private String encryptedString; 

    //Sets the value of the key 
    public void setKey(String myKey) { 

     MessageDigest sha = null; 
     try { 
      key = myKey.getBytes("UTF-8"); 
      sha = MessageDigest.getInstance("SHA-1"); 
      key = sha.digest(key); 

      key = Arrays.copyOf(key, 16); 
      secretKey = new SecretKeySpec(key, "AES"); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      Log.e(TAG, "Error in setting the key"); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
    } 

    public SecretKeySpec getKey(){ 
     return secretKey; 
    } 

    public String getDecryptedString() { 
     return decryptedString; 
    } 

    public void setDecryptedString(String decryptedString) { 
     this.decryptedString = decryptedString; 
    } 

    public String getEncryptedString() { 
     return encryptedString; 
    } 

    public void setEncryptedString(String encryptedString) { 
     this.encryptedString = encryptedString; 
    } 

    //Method for Encryption 
    public void encrypt(String strToEncrypt) { 
     try { 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
      cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
      byte[] encd = cipher.doFinal(strToEncrypt.getBytes("UTF-8")); 
      byte[] cc =Base64.encode(encd,Base64.DEFAULT); 
      setEncryptedString(new String(cc));   
     } catch (Exception e) { 
      Log.e(TAG, "Error in Encryption"); 
     } 
    } 

    //Method for Decryption 
    public void decrypt(String strToDecrypt) { 
     byte[] decd = null; 
     try { 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
      cipher.init(Cipher.DECRYPT_MODE, secretKey); 
      decd = cipher.doFinal(strToDecrypt.getBytes("UTF-8")); 

     } catch (Exception e) { 
      Log.e(TAG, "Error in Decryption" + decd); 
     } 
     setDecryptedString(decd.toString()); 
    } 
} 

はここでlogcat

08-10 12:27:23.187 30907-30907/com.test.encryptiontest E/SymmetricAlgorithmAES: Error in Decryptionnull 
08-10 12:27:23.189 30907-30907/com.test.encryptiontest E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.test.encryptiontest, PID: 30907 
    java.lang.IllegalStateException: Could not execute method for android:onClick 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
     at android.view.View.performClick(View.java:5198) 
     at android.view.View$PerformClick.run(View.java:21147) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
     Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Method.invoke(Native Method) 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
     at android.view.View.performClick(View.java:5198)  
     at android.view.View$PerformClick.run(View.java:21147)  
     at android.os.Handler.handleCallback(Handler.java:739)  
     at android.os.Handler.dispatchMessage(Handler.java:95)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
     at com.test.encryptiontest.AES.decrypt(AES.java:86) 
     at com.test.encryptiontest.Decode.decode(Decode.java:23) 
     at java.lang.reflect.Method.invoke(Native Method)  
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
     at android.view.View.performClick(View.java:5198)  
     at android.view.View$PerformClick.run(View.java:21147)  
     at android.os.Handler.handleCallback(Handler.java:739)  
     at android.os.Handler.dispatchMessage(Handler.java:95)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  


                     --------- beginning of system 
+1

あなたはあなたのエラーが何であるか、どこから投げられたのか、それを修正する方法を推測できると期待していました。私はその権利を持っていますか? – shmosel

+1

こんにちは。まず、タイトルをよりわかりやすくするようにしてください。次に、e.printStackTrace()を例外ブロックに入れてから、logcatで質問を編集してください。 –

+1

解読しようとする前にBase64でエンコードされた文字列をデコードするのを忘れてしまった。 –

答えて

-1

コード一つ

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
cipher.init(Cipher.DECRYPT_MODE, secretKey); 
decd = cipher.doFinal(strToDecrypt.getBytes("UTF-8")); 

1に注意し、例外を発生させる行を参照してくださいです。

+0

私はその行を考えています cipher.init(Cipher.DECRYPT_MODE、secretKey); がエラーの原因です。 – Soumyajit

+0

@SoumyajitGorai推測を止めることができるように、完全な例外スタックトレースをあなたの質問に追加してください。しかし、問題がその行にあるのであれば、それは非常に奇妙です。 –

+0

@ ArtjomB.iはそれを知らなかった – kommradHomer

関連する問題