![]() |
AES mit Delphi und Java
Hallo,
ich verwenden TPLockbox3 unter Delphi XE2 mit dem folgendem Code um einen Text zu verschlüssen:
Code:
Eine endsprechende DeCrypt Funktion läuft in Delphi einwandfrei.
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; Nun möchte ich die Entschlüsselung auch unter Java implementieren. Dazu habe ich folgenden Code gebastelt:
Code:
Leider funktioniert die Sache nicht. Es kommt nicht der ursprüngliche Text zurück.
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; } Kann mir jemand einen Tipp geben wie ich das Problem lösen kann ? |
AW: ASE mit Delphi und Java
Die Standardfrage lautet: Warum wird schon wieder mit Strings gearbeitet? Und dann auch noch als Schlüssel!?
Vorschlag zum Fixing: Benutze erst einmal direkt ein array[0..15] of byte statt Strings. Dann kannst Du zumindest sicher sein, daß der gleiche Schlüssel verwendet wird. Und später kann man den Rest debuggen, und eventuell aus Passwörtern mit PKDF2 oder BCrypt die Schlüsselbytes erzeugen. Wenn die Schlüsellbytes identisch sind, können allerdings weitere Probleme mit unterschiedlichen Betriebsmodi und Paddingvarianten auftauchen. In Delphi wird zwar kommentar-mäßig ECB (und ein Blockmode???) erwähnt, aber sonst kann ich in beiden Sprachen keine Hinweise darauf entdecken. |
AW: ASE mit Delphi und Java
Was is denn ASE?
Außerdem muss ich gammatester Recht geben. Es ist ein Wunder, dass dieser Code funktioniert. Ansonsten kann bei einem ECB nicht sonderlich viel schiefgehen. Mir fällt eigentlich nur die Schlüssel-Erweiterung ein, weil die nicht durch das NIST vereinheitlicht wurde. Außerdem wird beim Rijndael anders erweitert, als beim DES. Ich bezweifel aber sehr dass es daran liegt ... Gruß Puke |
AW: AES mit Delphi und Java
Danke für Eure Ratschläge, ich werde den Code entsprechend umbauen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz