Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rijndael-Entschlüsselung (https://www.delphipraxis.net/105563-rijndael-entschluesselung.html)

ArneH 24. Dez 2007 13:49


Rijndael-Entschlüsselung
 
Hallo!

Ich möchte in meiner Delphi/FreePascal-Anwendung Strings entschlüsseln, die mit Rijndael im CFB-Modus verschlüsselt sind.

Mit Python funktioniert das auch wunderbar, nur unter Delphi kriege ich es nicht hin.

Prinzipiell sollte das so laufen:

Code:
key = binascii.unhexlify('A3A882F4860F09E8F8B526BA15A161951EF7A00F00000000')

iv = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
iv_cipher = AES.new(key,AES.MODE_ECB)
iv = iv_cipher.encrypt(iv)
   
cipher = AES.new(key,AES.MODE_CFB,iv)
   
result = cipher.decrypt(encryptedstring)
Ich habe nun schon verschiedene Komponenten in Delphi ausprobiert (DEC, TLockBox, DCPcrypt), aber ich habe es nicht hingekriegt.

Könnte mir da bitte jemand auf die Sprünge helfen? Ich bin nach mehreren Stunden des vergeblichen Versuchens nämlich so langsam am Verzweifeln...

gammatester 24. Dez 2007 19:30

Re: Rijndael-Entschlüsselung
 
Zitat:

Zitat von ArneH
Hallo!

Rijndael im CFB-Modus

Code:
key = binascii.unhexlify('A3A882F4860F09E8F8B526BA15A161951EF7A00F00000000')

iv = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
iv_cipher = AES.new(key,AES.MODE_ECB)
iv = iv_cipher.encrypt(iv)
   
cipher = AES.new(key,AES.MODE_CFB,iv)
   
result = cipher.decrypt(encryptedstring)

Das ist auf jeden Fall kein Standard-CFB, da der IV zuerst im ECB-Modus verschlüsselt wird. Bis Du sicher, daß nicht der unverschlüsselte IV im
Delphi-Quellcode:
cipher = AES.new(key,AES.MODE_CFB,iv)
stehen muss?

Außerdem wäre zu klären, ob es ein 8-Bit-, 64-Bit- oder 128-Bit-CFB ist?

Lauft Dein Code mit den offiziellen Testvektoren aus der NIST-Spec?
http://csrc.nist.gov/publications/ni...SP_800-38B.pdf

Wenn die beiden Sachen klar sind, sollte es kein Problem sein, den Code nach Pascal zu übersetzen (wenn die Library den 8,64 oder 128 Bitmodus unterstützt, meine zB hat nur den 128-er).

Gruß Gammatester

q3fuba 13. Feb 2008 22:08

Re: Rijndael-Entschlüsselung
 
hi, gammatester

ich habe das das selbe problem wie ArneH.

Der IV (was auch immer das ist) wird bei mir auch ZUERST im ECB Verschlüsselt und dann wird IV_Cipher encrypted.

also so:
Delphi-Quellcode:
IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
IV_Cipher = AES.new(Key,AES.MODE_ECB)
IV = IV_Cipher.encrypt(IV)
nur beu mir geht das ganz dann sogar noch weiter ^_^

Delphi-Quellcode:
Key = binascii.unhexlify('F1C500DA3292182CF80CC3732239EEB3F560EAA100000000')

IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
IV_Cipher = AES.new(Key,AES.MODE_ECB)
IV = IV_Cipher.encrypt(IV)

obj = AES.new(Key,AES.MODE_CFB,IV)

afile = open(infile,'r')

data = afile.read()
data = binascii.unhexlify(''.join(data.split()))
data = data.splitlines()
habs auch mit LockBox rumgespielt, aber nichts rausbekommen.

Ob der key 128, 192 oder 256 (welche ich bei LockBox auswählen kann) ist, ist eigentlich egal, das kann man ja testen.

mich würde eben auch nur der Pascal code von meinem Python code interessieren :)

danke schonmal im voraus für eure hilfe!

ArneH 13. Feb 2008 22:15

Re: Rijndael-Entschlüsselung
 
@q3fuba: Da will wohl jemand RSD-Files entschlüsseln... :)

gammatester 14. Feb 2008 08:13

Re: Rijndael-Entschlüsselung
 
Hallo Leute.

ich weiß zwar nicht, was die genauen Probleme sind. Aber ich bin sehr sicher, da0 sie nicht mit Lockbox zu lösen sind.

Vergeßt Lockbox! Zu langsam, veraltet, nicht Standard und vor allem: Man hat keine Möglichkeit den IV selbst vorzugeben:

Delphi-Quellcode:
  if Encrypt then begin
    {set up an initialization vector (IV)}
{$IFDEF MSWINDOWS}
    Block[0] := timeGetTime;
    Block[1] := timeGetTime;
{$ENDIF}
{$IFDEF LINUX}
    fd := fopen( '/dev/random', 'r' );
    fread( @Block[0], SizeOf( byte ), SizeOf( Block[0] ), fd );
    fread( @Block[1], SizeOf( byte ), SizeOf( Block[1] ), fd );
    fclose( fd );
{$ENDIF}
Wenn bekannt ist, was verwendet wird und wie, sollte es doch möglich sein, systematisch eine Lösung zu finden mit verlässlichen Paketen, neben dem hier allseits bekannten DEC kann man noch Dave Bartons http://www.cityinthesky.co.uk/cryptography.html oder meine Routinen von http://home.netsurf.de/wolfgang.ehrhardt/crypt_de.html verwenden.

Gruß Gammatester

q3fuba 14. Feb 2008 10:18

Re: Rijndael-Entschlüsselung
 
Zitat:

@q3fuba: Da will wohl jemand RSD-Files entschlüsseln... :)
nöö *zwinker*
Würde mich allgemein mal gerne mit Crypting usw beschäftigen, da es ja nützlich ist ^_^

Zitat:

Zitat von gammatester
Hallo Leute.

ich weiß zwar nicht, was die genauen Probleme sind. Aber ich bin sehr sicher, da0 sie nicht mit Lockbox zu lösen sind.

Vergeßt Lockbox! Zu langsam, veraltet, nicht Standard und vor allem: Man hat keine Möglichkeit den IV selbst vorzugeben:

Delphi-Quellcode:
  if Encrypt then begin
    {set up an initialization vector (IV)}
{$IFDEF MSWINDOWS}
    Block[0] := timeGetTime;
    Block[1] := timeGetTime;
{$ENDIF}
{$IFDEF LINUX}
    fd := fopen( '/dev/random', 'r' );
    fread( @Block[0], SizeOf( byte ), SizeOf( Block[0] ), fd );
    fread( @Block[1], SizeOf( byte ), SizeOf( Block[1] ), fd );
    fclose( fd );
{$ENDIF}
Wenn bekannt ist, was verwendet wird und wie, sollte es doch möglich sein, systematisch eine Lösung zu finden mit verlässlichen Paketen, neben dem hier allseits bekannten DEC kann man noch Dave Bartons http://www.cityinthesky.co.uk/cryptography.html oder meine Routinen von http://home.netsurf.de/wolfgang.ehrhardt/crypt_de.html verwenden.

Gruß Gammatester

Hmm jo hab jetzt mal DCPCrypt installed.
"Rijndael" ist ja das neue AES soweit ich gelesen habe, wobei ich sagen muss,
ich habe bis jetzt nur mit XOR Cryption beschäftigt und das nicht wirklich intensiv.

Also habe mit Crypting eher wenig erfahung :!:

Wenn ich jetzt die componente "DCP_rijndael" ins form stecke, kann ich ja die Crypting Mode auswählen...
Aber da gibts keine "ECB" Mode zur auswahl, bei LockBox konnte man das auswählen.

Hier habe ich nur folgende:
cmCBC
cmCFB8bit
cmCFBblock
cmCTR
cmOFB

Da sehe ich also schonmal die erste Türe die für mich verschlossen ist :?

bis jetzt habe ich es soweit (ist aber warscheinlich auch falsch)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  key, Text: string;
begin
  Text:='mein Text';
  key:='8C35192D964DC3182C6F84F3252239EB4A320D2500000000';
  DCP_rijndael1.SetIV('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');

  // Hier fehlt noch einiges, was ich nicht verstehe wie es gemacht wird

  Memo1.Lines.Text:=DCP_rijndael1.DecryptString(Text);
end;
währe dir dankbar wenn du mir dabei auf die sprünge helfen könntest oder vielleicht irgendwo ein tutorial wie man AES IV mit Delphi verwendet wenn möglich für DCPCrypt.

Weil ich wiss das ganze dann ja auch verstehen können, warum das so oder so gemacht wird.

gammatester 14. Feb 2008 11:05

Re: Rijndael-Entschlüsselung
 
Zitat:

Zitat von q3fuba

währe dir dankbar wenn du mir dabei auf die sprünge helfen könntest oder vielleicht irgendwo ein tutorial wie man AES IV mit Delphi verwendet wenn möglich für DCPCrypt.

Fluch und Segen von Komponenten! Hinweis: Nach Installation die Datei BlockCiphers.html im Verzeichnis doc ansehen,

Zitat:

The TDCP_blockcipher component extends the TDCP_cipher component to provide chaining mode functions. Functions available are:
...
Delphi-Quellcode:
 
procedure EncryptECB(const Indata; var Outdata);
procedure DecryptECB(const Indata; var Outdata);

Darüber hinaus kannst Du ja wohl nicht erwarten, daß ich ein Tutorial für fremde Bibliotheken schreibe, (wenn dann erstmal für die eigene).

Für erste gute Hinweise sind die Artikel von wikipedia zu empfehlen, zB http://de.wikipedia.org/wiki/Cipher_Block_Chaining_Mode

Gruß Gammatester

negaH 14. Feb 2008 20:34

Re: Rijndael-Entschlüsselung
 
Poste doch mal das was nach der Ent-Verscxhlüsselung als Resultat rauskommen soll.

Im DEC machst du das so

Delphi-Quellcode:
with TCipher_Rijndael.Create do
try
  Mode := cmCFB8; // CFB-8Bit Feedback
  Init(TFormat_HEX.Decode('8C35192D964DC3182C6F84F3252239EB4A320D2500000000'), '', $FF); // IV ist $FF befüllt
  Result := DecodeBinary('0102030AAFFCC', TFormat_HEX); // Result ist lesbar, Input ist HEX Formatiert
finally
  Free;
end;
Also, am besten du postest hier zwei Sets von Passwörtern + Verschlüsselten Daten + Entschlüsselten Daten, alles im HEX Format. Dann bin ich wsentlich schneller beim Austesten aller möglichen Parameter als zu verstehen was du exakt möchtest, was du schon probiert hast und ob deine Angaben auch stimmen und nicht Missverständnisse sind.

Gruß Hagen

q3fuba 14. Feb 2008 22:36

Re: Rijndael-Entschlüsselung
 
Zitat:

Also, am besten du postest hier zwei Sets von Passwörtern + Verschlüsselten Daten + Entschlüsselten Daten, alles im HEX Format. Dann bin ich wsentlich schneller beim Austesten aller möglichen Parameter als zu verstehen was du exakt möchtest, was du schon probiert hast und ob deine Angaben auch stimmen und nicht Missverständnisse sind.
So hier hab ich mal 3 varianten von Ver/Entschlüsselten strings:
Code:
Verschlüsselt 1:
696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E
5432334C4C6752306256646C652F77735A3246704B6E5A654F6C6E686E2F586E4C4C4A6E3D3D0D0A^

Entschlüsselt 1:
CCF: [url]http://rapidshare.com/files/58141435/voy402.part1.rar[/url]

------------------------------------------------------------------------------

Verschlüsselt 2:
696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E
5432304434714341456B506573524D424B4930497A7A57357A3D0D0A

Entschlüsselt 2:
CCF: [url]http://rapidshare.com/files/91891665/D2SC.rar[/url]

------------------------------------------------------------------------------

Verschlüsselt 3:
696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E
5432304434714341456B506573524D424B4930497A7A57357A3D0D0A387447614C6C6B4F365264314831
4558386B414F55664B47494E486E4F346C6F376C4A31777233516E7867315234455571724D3752596F2F
324F3335376B2B2F5A7639304E715976425456390D0A

Entschlüsselt 3:
CCF: [url]http://rapidshare.com/files/91891665/D2SC.rar[/url]
CCF: [url]http://rapidshare.com/files/72806508/Forum_Tools.rar[/url]
Das "Passwort" ist immer gleich, bei allen und wie schon oben geschrieben:
Code:
8C35192D964DC3182C6F84F3252239EB4A320D2500000000
der komplette inhalt der "decrypt.py" ist der hier:
Code:
#!/usr/bin/env python

import binascii
import base64 
from Crypto.Cipher import AES
import sys

# 8C 35 19 2D 96 4D C3 18 2C 6F 84 F3 25 22 39 EB 4A 32 0D 25

infile = sys.argv[1]
outfile = infile+'.txt'
Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')

IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
IV_Cipher = AES.new(Key,AES.MODE_ECB)
IV = IV_Cipher.encrypt(IV)

obj = AES.new(Key,AES.MODE_CFB,IV)

afile = open(infile,'r')
f = open(outfile, 'w')

data = afile.read()
data = binascii.unhexlify(''.join(data.split()))
data = data.splitlines()

for link in data:
    link = base64.b64decode(link)
    link = obj.decrypt(link)
    f.write(str(link.replace('CCF: ', ''))+'\n')   

afile.close()
f.close()
hab den schon so modifiziert, dass das ergebnis fast so ist, wie ich es haben will, nur will ich das ganze jetzt auch in delphi machen können.

Hoffe das hilft dir, folgedessen auch mir weiter :)

// edit sorry wegen der DEC, hab nicht gewusst dass die von dir is :oops:
// auch "installiert hab ichs jetzt schon, also die ordner einfach in den suchpfad hinzugefügt und schon funzt der code auch -> :wall:

[edit=Jelly]Zeilen umgebrochen... Mfg, Jelly[/edit]

BUG 14. Feb 2008 22:45

Re: Rijndael-Entschlüsselung
 
Zitat:

Zitat von q3fuba
wieso ich die DEC von Luckie nicht installen kann :)

Da bist gut, die DEC ( <- siehe Hint) ist von Hagen aka negaH :mrgreen:

OnTopic: Hast du schon nach Hier im Forum suchenDEC AND installieren gesucht?

MfG,
Bug


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 1 von 4  1 23     Letzte »    

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