Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu rajcze
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, World11
 ciphertext = AES.new(tajneheslo123456,
 AES.MODE_ECB).encrypt(resize(plain, AES.block_size))
 print ciphertext.encode('hex')  # napise
 a8ba9848cd563d3e762de25fffaf7aa46e7a5f28eae4e2f0684f8d9ef949869f

 plain = Hello, World
 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


Re: [python] Tisk unicode řetězce a tisk seznamu unicode řetězců

2011-06-08 Tema obsahu Petr Přikryl
David Rohleder píše 

[...]

Když už jsme u těch řetězců: jak se udělá raw unicode řetězec, tj.

 interpret neinterpretuje uvnitř? Generuju si latexový dokument a on se
 přirozeně vzteká na:
 
 hlavicka = ur

 documentclass[a4,landscape]{article}
 usepackage{graphicx}
 usepackage[czech]{babel}
 usepackage[utf8]{inputenc}
 begin{document}
 thispagestyle{empty}
 
 
 print hlavicka
 
 SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes

 in position 39-40: truncated u

To je jedno z těch temných zákoutí. Ono se to vzteká už při

hlavicka = ur'usepackage'
print hlavicka

Problém je v tom, že raw-unicode-escape s předponou ur není tak úplně 'raw'.
Interpretují se posloupnosti u -- viz 
http://docs.python.org/tutorial/introduction.html#unicode-strings:


    For experts, there is also a raw mode just like the one 
 for normal strings. You have to prefix the opening quote 
 with ‘ur’ to have Python use the Raw-Unicode-Escape encoding. 
 It will only apply the above u conversion if there is an uneven 
 number of backslashes in front of the small ‘u’.


V tomto případě mě napadá jen ta možnost, že se napřed vyrobí 
raw string (starý, neunicode) a převede se druhým krokem

na unicode:

==
# -*- coding: utf-8 -*-

hlav = r
documentclass[a4,landscape]{article}
usepackage{graphicx}
usepackage[czech]{babel}
usepackage[utf8]{inputenc}
begin{document}
thispagestyle{empty}

print type(hlav)
hlavicka = unicode(hlav, 'utf-8')
print type(hlavicka)
print hlavicka
==

Dá se to trochu vylepšit tím, že si nadefinuješ funkci u(), aby se 
to hezčeji zapislovalo:


==
# -*- coding: utf-8 -*-

def u(raw_string, encoding='utf-8'):
    return unicode(raw_string, encoding)


hlavicka = u(r
documentclass[a4,landscape]{article}
usepackage{graphicx}
usepackage[czech]{babel}
usepackage[utf8]{inputenc}
begin{document}
thispagestyle{empty}
)

print type(hlavicka)
print hlavicka
==

V případě chroupání LaTeXových textů bych ale vážně uvažoval
o použití Python 3 -- i kdyby jen pro tento účel. Tam se z toho
stane jen raw string, který bude automaticky unicode (nový str
se rovná starému typu unicode):

==
# -*- coding: utf-8 -*-

hlavicka = r
documentclass[a4,landscape]{article}
usepackage{graphicx}
usepackage[czech]{babel}
usepackage[utf8]{inputenc}
begin{document}
thispagestyle{empty}


print(type(hlavicka))
print(hlavicka)
==

Pokud toho chroustacího kódu máš víc, pomůže pythonovská
utilitka 2to3 -- viz 
http://diveintopython3.py.cz/case-study-porting-chardet-to-python-3.html#running2to3

P.

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Re: [python] Tisk unicode řetězce a tisk seznamu unicode řetězců

2011-06-08 Tema obsahu Petr Přikryl

Mailer mi sežral zpětná lomítka. Dopiš si je tam.

  To je jedno z těch temných zákoutí. Ono se to vzteká už při
  
  hlavicka = ur'usepackage'
  print hlavicka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Jirka Vejrazka
 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
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Visgean Skeloru
Btw: nemáte zkušenosti s nějakým modulem pro šifrování na vyšší úrovni?




2011/6/8 Jirka Vejrazka jirka.vejra...@gmail.com

  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
 ___
 Python mailing list
 Python@py.cz
 http://www.py.cz/mailman/listinfo/python




-- 
PGP pub key:

http://keyserver.pgp.com/vkd/SubmitSearch.event?SearchCriteria=visgean%40gmail.com
   http://www.abclinuxu.cz/lide/visgean/gpg
   A453 B7F3 33D9 3BE6 2B8A | F014 5347 EBAC 0A5A 3E92
Jabber: visg...@jabber.org | visg...@jabber.cz
Github: http://github.com/Visgean
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu rajcze
Co si predstavujes pod sifrovanim na vyssi urovni?

2011/6/8 Visgean Skeloru visg...@gmail.com:
 Btw: nemáte zkušenosti s nějakým modulem pro šifrování na vyšší úrovni?




 2011/6/8 Jirka Vejrazka jirka.vejra...@gmail.com

  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
 ___
 Python mailing list
 Python@py.cz
 http://www.py.cz/mailman/listinfo/python



 --
 PGP pub key:

 http://keyserver.pgp.com/vkd/SubmitSearch.event?SearchCriteria=visgean%40gmail.com
    http://www.abclinuxu.cz/lide/visgean/gpg
    A453 B7F3 33D9 3BE6 2B8A | F014 5347 EBAC 0A5A 3E92
 Jabber: visg...@jabber.org | visg...@jabber.cz
 Github: http://github.com/Visgean


 ___
 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.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Jirka Vejrazka
PyCrypto? Vys uz to asi rozumne nejde...
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Jirka Vejrazka
Hmm, tak to mne napada jenom keyczar:
http://code.google.com/p/keyczar/downloads/detail?name=python-keyczar-0.6b.061709.tar.gz

  Zkus mozna byt presnejsi a napsat co se snazis vyresit nebo co ti
nejde, sifrovani na vyssi urovni asi znamena pro kazdeho neco
jineho...

   Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu rajcze
Hehe, a ja jsem tak odolaval :-DD

2011/6/8 Jirka Vejrazka jirka.vejra...@gmail.com:
 Hmm, tak to mne napada jenom     keyczar:
 http://code.google.com/p/keyczar/downloads/detail?name=python-keyczar-0.6b.061709.tar.gz

  Zkus mozna byt presnejsi a napsat co se snazis vyresit nebo co ti
 nejde, sifrovani na vyssi urovni asi znamena pro kazdeho neco
 jineho...

   Jirka
 ___
 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.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Visgean Skeloru
Prostě něco kam jenom zadáte heslo/hash, typ šifry a text k zašifrování.
Problém je v tomhle:

Keyczar is very much beta software. The wire formats and key formats may
 change with later versions. Backward compatibility with early versions may
 not necessarily be maintained.


zajímalo mě jestli tady jsou nějaké hotové/uznávané moduly co dělají podobné
věci...

2011/6/8 rajcze raj...@gmail.com

 Hehe, a ja jsem tak odolaval :-DD

 2011/6/8 Jirka Vejrazka jirka.vejra...@gmail.com:
  Hmm, tak to mne napada jenom keyczar:
  http://code.google.com/p/keyczar/downloads/detail?name=python-keyczar-0.6b.061709To
 ne, 
 p.tar.gzhttp://code.google.com/p/keyczar/downloads/detail?name=python-keyczar-0.6b.061709.tar.gz
 
   Zkus mozna byt presnejsi a napsat co se snazis vyresit nebo co ti
  nejde, sifrovani na vyssi urovni asi znamena pro kazdeho neco
  jineho...
 
Jirka
  ___
  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.
 ___
 Python mailing list
 Python@py.cz
 http://www.py.cz/mailman/listinfo/python




-- 
PGP pub key:

http://keyserver.pgp.com/vkd/SubmitSearch.event?SearchCriteria=visgean%40gmail.com
   http://www.abclinuxu.cz/lide/visgean/gpg
   A453 B7F3 33D9 3BE6 2B8A | F014 5347 EBAC 0A5A 3E92
Jabber: visg...@jabber.org | visg...@jabber.cz
Github: http://github.com/Visgean
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Re: [python] pytho + php sifrovanie/desifrovanie

2011-06-08 Tema obsahu Jirka Vejrazka
 Prostě něco kam jenom zadáte heslo/hash, typ šifry a text k zašifrování.

  Tohle je bohuzel nerealne. Sifrovani potrebuje trochu vic, treba
dobry generator nahodnych cisel a tak. Proste o sifrovani music neco
vedet, aby to bylo bezpecne. Nikdo nikoho nenuti studovat detaily, ale
tech par radek kodu ohledne inicializace a tak musi proste napsat
kazdy.

  Pokud chces neco opravdu jednoducheho, mrkni se na
http://www.freenet.org.nz/ezPyCrypto/ - nasel jsem to ve svem archivu.
Ale uz jsem to nevidel leta, nevim jestli je to jeste pouzitelne.

  Pokud chces neco jeste jednodussiho, neni ti asi pomoci ;-)

 zajímalo mě jestli tady jsou nějaké hotové/uznávané moduly co dělají podobné
 věci...

  Ano, treba PyCrypto, uz nekolikrat zminovane. Je to Python interface
okolo uznavanych sifrovacich knihoven.

   Jirka

P.S. Nesnazim se te odradit, jenom bych te rad varoval ze akce typu
zadam heslo, vyberu sifru a mam hotovo vedou k pomerne drahym
chybam. Jestli si chces jenom zasifrovat MP3, tak pouzij XOR ;-)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python