3DES s DEC (súhrn šifrovania Delphi) - strana 2 - Delphi-PRAXiS

je to správne

šifrovania

Som skôr v strate, svoju prácu som dokončil, ale napriek tomu by som ju chcel hodnoverne vyriešiť, ak sa niekedy budem musieť vrátiť k DEC a 3DES

AW: 3DES s DEC (Delphi Encryption Compendium)

Mali by ste brať CBC, ale ako režim použite cmCBCx.

Možno sú s tým problémy

AW: 3DES s DEC (Delphi Encryption Compendium)

a ako som povedal, tiež som to vyriešil polstrovaním, ak posledný blok nie je plný

ale algoritmus vytvorí 8 bajtový odpad, potom 248 bajtov je všetko super a potom znova periodické nezmysly

Môže sa stať, že je to kvôli môjmu programu, ale neurobil som nič nápadné s ohýbaním ukazovateľa alebo s ničím iným

AW: 3DES s DEC (Delphi Encryption Compendium)

ok, popol nad mojou hlavou * kačica *. našiel chybu, vstupná vyrovnávacia pamäť bola iba 256 bajtov. a čítanie súboru bolo poškodené


ale prvých 8 bajtov je stále nelogických

Registrované od: 11. októbra 2003
Poloha: Florencia na Labi
36 983 príspevkov

AW: 3DES s DEC (Delphi Encryption Compendium)

AW: 3DES s DEC (Delphi Encryption Compendium)

existuje "Inicializačný vektor"

a nejako sa to zaplní, ak to nespomeniem
teraz nastavte na # 0 # 0 # 0 # 0 # 0 # 0 # 0 # 0 a teraz je možné prečítať aj prvý blok

používa DECUtil, DECCipher, DECFmt;

// Výplň CrypTool na CBC s počtom výplní.
// tak napr. # 4 # 4 # 4 # 4, keď sú 4 naplnené
// Pri CBC sa veľkosť bloku rozšíri na/o 8.
// vstup = 15 bajtov, výstup = 16. výplň # 1
// vstup = 16, výstup = 24. polstrovanie # 8 # 8 # 8 # 8 # 8 # 8 # 8 # 8
// Inicializujte IV s 8-krát 0, inak je prvý blok odpadky # 0 # 0 # 0 # 0 # 0 # 0 # 0 # 0
postup TForm1.Button1Click (odosielateľ: TObject);
var
DefCipherClass: TCipher_2DES;
Teplota: Reťazec;
začať
DefCipherClass: = TCipher_2DES.Create;
DefCipherClass.Mode: = cmCBCx;

Teplota: = 'AAAAAAAAAAAAAAAAA';
DefCipherClass.Init (Teplota, # 0 # 0 # 0 # 0 # 0 # 0 # 0 # 0); // nastav heslo a IV
Memo1.Lines.Add (IntToStr (Length (Temp)) + ':' + Temp);
Memo1.Lines.Add (TFormat_HEX.Encode (teplota));

// naša správa + polstrovanie, aby sme sa dostali k bloku veľkosti 8
Teplota: = '123456789012345' + # 1;
Memo1.Lines.Add (IntToStr (Length (Temp)) + ':' + Temp);
Memo1.Lines.Add (TFormat_HEX.Encode (teplota));

Teplota: = DefCipherClass.EncodeBinary (Teplota); // zašifrovať
Memo1.Lines.Add (IntToStr (Length (Temp)) + ':' + Temp);
Memo1.Lines.Add (TFormat_HEX.Encode (teplota));

Teplota: = DefCipherClass.DecodeBinary (Teplota); // dešifrovať
Memo1.Lines.Add (IntToStr (Length (Temp)) + ':' + Temp);
Memo1.Lines.Add (TFormat_HEX.Encode (teplota));

// Teraz je potrebné odstrániť polstrovanie

Som teraz prekvapený, aké ľahké to bolo s DEC ^^
Na začiatku som bol rýchlo ohromený, pretože v príkladoch bolo toho veľa a bolo pre mňa ťažké odfiltrovať to, čo som potreboval
ale akonáhle máte perspektívu, DEC je jednoducho úžasný

a ak vynecháte všetky Memo1.Lines.Add je to 10-riadkový kód na šifrovanie pomocou 3DES a potom na jeho opätovné dešifrovanie

postup TForm1.Button1Click (odosielateľ: TObject);
var
DefCipherClass: TCipher_2DES;
Teplota: Reťazec;
začať
DefCipherClass: = TCipher_2DES.Create;
DefCipherClass.Mode: = cmCBCx;
DefCipherClass.Init ('AAAAAAAAAAAAAAAA', # 0 # 0 # 0 # 0 # 0 # 0 # 0 # 0); // nastav heslo a IV

Teplota: = '123456789012345' + # 1; // text + polstrovanie
Teplota: = DefCipherClass.EncodeBinary (Teplota); // zašifrovať
DefCipherClass.Done; // vyčistiť
Teplota: = DefCipherClass.DecodeBinary (Teplota); // dešifrovať
// Teraz je potrebné odstrániť polstrovanie
DefCipherClass.Free;
koniec;

toto je teraz 100% kompatibilné s CrypTool