Hallo.
Ich habe eine Klasse die einen mit AES verschlüsselten Text wieder entschlüsselt. Die Verschlüsselung hat super funktioniert aber bei der Entschlüsselung bekomme ich immer einen Fehler:
Der Fehler:
und der Code
Ich habe eine Klasse die einen mit AES verschlüsselten Text wieder entschlüsselt. Die Verschlüsselung hat super funktioniert aber bei der Entschlüsselung bekomme ich immer einen Fehler:
Der Fehler:
Java:
at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
at javax.crypto.Cipher.init(Cipher.java:1396)
at javax.crypto.Cipher.init(Cipher.java:1327)
at HelloWorld.decrypt(HelloWorld.java:56)
at HelloWorld.main(HelloWorld.java:22)
und der Code
Java:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
public class HelloWorld {
public static void main(String[] args) throws Exception {
String text = "uMwZ3jWryoPp/tjnGV7bBwZQZoFLwBYaWni70Qi4kEw9TD+2J9S4/ILFDzn0VAAd4aNjTJD+guBIOl0TbUd3Bg==";
String keyStr = "sehrgeheimerschlüssel";
String dec = decrypt(text, keyStr);
System.out.println("Decrypt:" + dec);
}
public static String decrypt(String text, String keyStr)throws InvalidKeyException, IllegalBlockSizeException,BadPaddingException, UnsupportedEncodingException,NoSuchAlgorithmException, NoSuchPaddingException,InvalidAlgorithmParameterException{
// Das Passwort bzw der Schluesseltext
// byte-Array erzeugen
byte[] key = (keyStr).getBytes("UTF-8");
// aus dem Array einen Hash-Wert erzeugen mit MD5 oder SHA
MessageDigest sha = MessageDigest.getInstance("SHA-256");
key = sha.digest(key);
// nur die ersten 128 bit nutzen
key = Arrays.copyOf(key, 16);
// der fertige Schluessel
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
byte[] encryptedData = DatatypeConverter.parseBase64Binary(text);
Cipher cipher = Cipher.getInstance("AES");
byte[] iv = Arrays.copyOfRange(encryptedData, 0, 16);
byte[] cipherText = Arrays.copyOfRange(encryptedData, 16, encryptedData.length);
IvParameterSpec iv_specs = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv_specs);
byte[] plainTextBytes = cipher.doFinal(cipherText);
String plainText = new String(plainTextBytes);
return plainText;
}
}