AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

AES mit Delphi und Java

Ein Thema von o-sch · begonnen am 5. Aug 2014 · letzter Beitrag vom 5. Aug 2014
Antwort Antwort
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
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: ASE mit Delphi und Java

  Alt 5. Aug 2014, 09:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#3

AW: ASE mit Delphi und Java

  Alt 5. Aug 2014, 10:20
Was is denn ASE?
  • American Society of Echocardiography
  • Alliance to Save Enery
  • American Stock Exchange
Oder meintest du etwa den Rijndael-Algorithmus, der von der NIST 2001 zum Advanced Encryption Standard, kurz AES, gewählt wurde? Außerdem benutze das nächste Mal Delphi-Code-Tags.

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
Gruß Puke

Geändert von Puke ( 5. Aug 2014 um 10:23 Uhr) Grund: Weil ich es kann?
  Mit Zitat antworten Zitat
o-sch

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

AW: AES mit Delphi und Java

  Alt 5. Aug 2014, 11:17
Danke für Eure Ratschläge, ich werde den Code entsprechend umbauen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz