[python] pytho + php sifrovanie/desifrovanie

Jirka Vejrazka jirka.vejrazka na gmail.com
Středa Červen 8 09:53:43 CEST 2011


> Jediné, čo ma trápi je to, že pri posledných dvoch plainoch sú rovnaké
> začiatky. zaujímavé je, že pri "Hello, World11" a "Hello, World111"
> nie sú rovnaké začiatky. hm. Skúšal som zmeniť mód na CFB, CBC, ale
> vždy tie začiatky sú rovnaké. prečo tomu tak je? dúfal som, že by to
> nemalo byť rovnaké.

  Ahoj,

  Podivej se bliz na to, jak funguje AES. Zjistis, ze AES je blokova
sifra, kdy se plaintext rozdeli na bloky a ty se zasifruji. Vychazi ti
stejny ciphertext v poslednich dvou pripadech, protoze je stejny
vstupni blok dat i stejny sifrovaci klic. Ty prvni dva pripady maji
jiny ciphertext, protoze vstupni data maji mene nez 16 znaku (128
bitu) a tim padem jsou zarovnane mezerami a nejde o stejny vstup do
blokove sifry. Experimentalne zjistis, ze kdyz ke druhemu pokusu
(plain = "Hello, World111") pridas na konec jeste jednu jednicku,
dostanes stejny vysledek jako v pokusech 3 a 4, protoze len(plain) >=
16.

  Pro ECB (ktery by se nemel pouzivat pro nic citliveho) tohle plati
pro kazdy blok plaintextu, takze pokud bys mel opakovanou sekvenci 16
znaku na vstupu, dostanes pri ECB opakujici se sekvenci na vystupu
(tech zasifrovanych 16 znaku). Pri ostatnich modech se do sifrovani
bloku X promitne (neni uplne dulezite jak) neco z bloku X-1, takze 16
opakujicich se znaku se v kazdem bloku zasifruje "trochu jinak". Proto
pro ty ostatni mody potrebujes inicializacni vektor, coz je prave
falesne "neco z bloku X-1" pro x=1 (prvni zasifrovavany blok dat).

  Snad jsem to moc nezkomplikoval :)

   Jirka


Další informace o konferenci Python