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
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
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? –
Sie haben vergessen, die Base64-codierte Zeichenfolge zu decodieren, bevor Sie versuchen, sie zu entschlüsseln. –