[python] pytho + php sifrovanie/desifrovanie

rajcze rajcze na gmail.com
Středa Červen 8 09:16:58 CEST 2011


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 <peterirbizon na 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... na 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... na 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... na py.cz
> > >http://www.py.cz/mailman/listinfo/python- Skrýt citovaný text -
> >
> > - Zobrazit citovaný text -
>
> _______________________________________________
> Python mailing list
> Python na 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.


Další informace o konferenci Python