[python] pytho + php sifrovanie/desifrovanie

miamia peterirbizon na gmail.com
Středa Červen 8 02:26:58 CEST 2011


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 -



Další informace o konferenci Python