2016-08-08 31 views
-3

Der angegebene Code verwendet die AES-Verschlüsselung mit einem vom Benutzer angegebenen 128-Bit-Schlüsselwert. Ich habe diesen Code in meinem Android-Projekt verwendet, aber der folgende Code verschlüsselt richtig, aber zum Zeitpunkt der Entschlüsselung zeigt es eine Ausnahme (Fehler bei der Entschlüsselung) und führt dazu, dass die App leider gestoppt wird. Hier ist der folgende Code,Fehler bei der AES-Entschlüsselung

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

Hier ist die 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

Sie hatten also gehofft, wir könnten raten, was Ihr Fehler ist, wo er hingeworfen wird und wie Sie ihn beheben können. Habe ich das richtig? – shmosel

+1

Hallo. Versuchen Sie zunächst, die Titel beschreibender zu hinterfragen. Zweitens, können Sie bitte ein 'e.printStackTrace()' in Ihre Ausnahmeblöcke setzen und dann die Frage mit dem Logcat bearbeiten? –

+1

Sie haben vergessen, die Base64-codierte Zeichenfolge zu decodieren, bevor Sie versuchen, sie zu entschlüsseln. –

Antwort

-1

versuchen, den Code

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

eins nach dem anderen und sehen Sie zu beachten, welche Linie die Ausnahme erzeugt.

+0

decodieren müssen Ich denke, die Zeile cipher.init (Cipher.DECRYPT_MODE, secretKey); verursacht den Fehler. – Soumyajit

+0

@SoumyajitGorai Bitte fügen Sie die vollständige Ausnahme stacktrace zu Ihrer Frage hinzu, damit wir aufhören können zu raten. Aber es wäre sehr seltsam, wenn das Problem in dieser Zeile wäre. –

+0

@ ArtjomB.i wusste das nicht – kommradHomer