Hallo,
ich verwenden TPLockbox3 unter Delphi XE2 mit dem folgendem Code um einen Text zu verschlüssen:
Code:
const _MyMasterKey : UTF8String = '12345678901234567890123456789012';
function MyASE128.EnCrypt(aStr: string): string;
var base64Ciphertext:AnsiString;
Codec: TCodec;
CryptographicLibrary1: TCryptographicLibrary;
begin
Result := '';
CryptographicLibrary1 := TCryptographicLibrary.Create(Self);
Codec := TCodec.Create(Self);
Codec.CryptoLibrary := CryptographicLibrary1;
Codec.ChainModeId := ChainIds[0]; // ECB
Codec.StreamCipherId := BlockCipher_ProgId; // BlockMode
Codec.BlockCipherId := CipherIds[0]; // AES-128
try
codec.Password := Copy(_MyMasterKey,0,16);
codec.EncryptString( FixCipherBlockLength(aStr), base64Ciphertext);
result := base64Ciphertext;
finally
Codec.CryptoLibrary := NIL;
CryptographicLibrary1.Free;
Codec.Free;
end;
end;
function MyASE128.FixCipherBlockLength(aStr: string): string;
var rest:integer;
begin
Result := aStr;
rest := Length(aStr) mod 16;
if rest <> 0 then
begin
Result := Result + DupeString(' ', 16-rest);
end;
end;
Eine endsprechende DeCrypt Funktion läuft in Delphi einwandfrei.
Nun möchte ich die Entschlüsselung auch unter Java implementieren.
Dazu habe ich folgenden Code gebastelt:
Code:
public static String _MyMasterKey = "12345678901234567890123456789012";
public static String MyDecrypt(String CryptText) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException {
String encryptedMessage = CryptText;
byte[] keyByteArray = _MyMasterKey.getBytes(Charset.forName("UTF-8"));
keyByteArray = Arrays.copyOf(keyByteArray, 16);
SecretKeySpec skeySpec = new SecretKeySpec(keyByteArray, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] msgByteArray = encryptedMessage.getBytes(Charset.forName("UTF-8"));
String originalMessage = new String(cipher.doFinal( msgByteArray ));
System.out.printf("Original Text: %s\n", originalMessage);
return originalMessage;
}
Leider funktioniert die Sache nicht. Es kommt nicht der ursprüngliche Text zurück.
Kann mir jemand einen Tipp geben wie ich das Problem lösen kann ?