Thema: Delphi AES mit Delphi und Java

Einzelnen Beitrag anzeigen

o-sch

Registriert seit: 18. Okt 2006
Ort: Essen
11 Beiträge
 
Delphi XE2 Enterprise
 
#1

AES mit Delphi und Java

  Alt 5. Aug 2014, 07:35
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 ?

Geändert von o-sch ( 5. Aug 2014 um 11:14 Uhr)
  Mit Zitat antworten Zitat