3DES s DEC (súhrn šifrovania Delphi) - strana 2 - Delphi-PRAXiS
je to správne

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