Preklep: "... stejnych 16 _bytu_ dat .."
2011/6/8 rajcze <raj...@gmail.com>: > Ahoj, > > me na tech "stejnych prefixech" nic divneho neprijde - naopak, kdyby > to tak nebylo, tak bys ten text nikdy nemohl desifrovat ;-) > > Kdyz si aspon neco malo prectes o AES, zjistis, ze sifruje po 128 > bitovych blocich (tj. 16 bytu), takze kdyz vezmes "stejnych 16 bitu > dat" a zasifrujes je pokazde "stejnym klicem", tak neni snad nic > prekvapiveho na tom, ze vychazi "stejne vypadajici zasifrovany blok". > > J. > > 2011/6/8 miamia <peterirbi...@gmail.com> >> >> Ahoj Peťo, >> >> áno, potvrdzujem, že to ide v tej hombinácii ok. ďakujem za ukážku. >> Spravil som pokus: >> plain = "Hello, World11" >> ciphertext = AES.new("tajneheslo123456", >> AES.MODE_ECB).encrypt(resize(plain, AES.block_size)) >> print ciphertext.encode('hex') # adc1f6cd135accd4d3627083facc4074 >> >> plain = "Hello, World111" >> ciphertext = AES.new("tajneheslo123456", >> AES.MODE_ECB).encrypt(resize(plain, AES.block_size)) >> print ciphertext.encode('hex') # c29cfc58173b5a4f4ba6d397fe083600 >> >> plain = "Hello, World1111111111" >> ciphertext = AES.new("tajneheslo123456", >> AES.MODE_ECB).encrypt(resize(plain, AES.block_size)) >> print ciphertext.encode('hex') # napise >> a8ba9848cd563d3e762de25fffaf7aa46e7a5f28eae4e2f0684f8d9ef949869f >> >> plain = "Hello, World111111111111" >> ciphertext = AES.new("tajneheslo123456", >> AES.MODE_ECB).encrypt(resize(plain, AES.block_size)) >> print ciphertext.encode('hex') # napise >> a8ba9848cd563d3e762de25fffaf7aa4e9277a3748ee1a6daf8f1d0e5fdfc026 >> >> >> 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é. >> >> >> On 4 čvn, 18:59, Petr Messner <petr.mess...@gmail.com> wrote: >> > Ahoj, >> > >> > jen ze zajímavosti jsem vyzkoušel AES a šlo to dobře, v PHP s nějakou >> > knihovnou, co jsem našel na webu... >> > >> > Zašifrování v Pythonu: >> > >> > #!/usr/bin/env python >> > from Crypto.Cipher import AES >> > def resize(s, blockSize): >> > if len(s) % blockSize == 0: >> > return s >> > else: >> > return s + " " * (blockSize - len(s) % blockSize) >> > plain = "Hello, World!" >> > ciphertext = AES.new("tajneheslo123456", >> > AES.MODE_ECB).encrypt(resize(plain, AES.block_size)) >> > def to_hex(s): >> > return " ".join(hex(ord(c)).replace("0x", "").rjust(2, "0") for c in s) >> > print to_hex(ciphertext) # napise 3d e8 9f 9f 8d dc f1 ef 1c 6f fc 45 >> > c6 72 14 f7 >> > >> > Dešifrování v PHP: >> > >> > <?php >> > $ciphertext = "3d e8 9f 9f 8d dc f1 ef 1c 6f fc 45 c6 72 14 f7"; >> > require("./AES.class.php"); //http://www.phpaes.com/ >> > $aes = new AES('tajneheslo123456'); >> > $ciphertext = >> > "\x3d\xe8\x9f\x9f\x8d\xdc\xf1\xef\x1c\x6f\xfc\x45\xc6\x72\x14\xf7"; >> > echo "'" . $aes->decrypt($ciphertext) . "'\n"; >> > ?> >> > >> > Problém je, že klíč pro AES musí mít délku 16, 24 nebo 32 bajtů a >> > délka plaintextu musí být dělitelná 16, takže jsem na konec přidal >> > patřičný počet mezer (v Pythonu funkcí resize). Správně bych měl asi >> > místo mezer použít náhodné znaky a spolu se zprávou poslat i délku >> > plaintextu a dešifrovaný text pak na tuto délku oříznout. >> > >> > AES má různé módy, použil jsem ECB, protože phpAES umí (podle >> > informací na phpaes.com) v neplacené verzi jen tento mód. Bohužel >> > nevím v čem se tyto módy liší. U ostatních módů se musí kromě klíče >> > určit i inicializační vektor. >> > >> > Jo a pokud by bylo potřeba binární řetězec (tedy zašifrovaný text) >> > nějak rozumně čitelně vypsat, hodí se na to base64 (v ukázce jsem >> > použil hexadecimální čísla). >> > >> > Petr Messner >> > >> > 2011/6/4 miamia <peterirbi...@gmail.com> >> > >> > >> > >> > >> > >> > > Dobry den, >> > > prosim Vas, potrebujem zasifrovat text v pythone a potom ho desifrovat >> > > v skripte PHP. Skusal som pycrypto a nejake aes php skripty, ale >> > > vysledky (zasefirovanie/desifrovanie) neboli rovnake - nepodarilo sa >> > > mi to rozchodit. Da sa niekde najst priamo nejaky priklad, ako toto >> > > spravit v pythone a desifrovat v PHP (najlepsie zdrojaky)?velka vdaka >> > > _______________________________________________ >> > > Python mailing list >> > > pyt...@py.cz >> > >http://www.py.cz/mailman/listinfo/python- Skrýt citovaný text - >> > >> > - Zobrazit citovaný text - >> >> _______________________________________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python > > > > -- > Rules of Optimization: > Rule 1: Don't do it. > Rule 2 (for experts only): Don't do it yet. > -- Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet. _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python