[pyar] Encriptar Datos con Python

1,434 views
Skip to first unread message

Roberto Bozzacchi

unread,
Jun 10, 2010, 2:53:46 PM6/10/10
to Python Argentina
Hola, alguien me tira una punta de dónde puedo obtener la idea o la base para realizar un programa que Encripte y Desencripte un mensaje con una clave?
Si no me equivoco es algo así como las PGK.... creo

Quiero envierle una clave a mi amigo para que use al querer envierme un mensaje a mi así desde mi programa puede desencriptar usando esa clave pública y la privada....

Se entiende?

--

Robbie Bozzacchi
Metasigno Brain

Ariel Marcelo Diaz

unread,
Jun 10, 2010, 3:02:45 PM6/10/10
to Python Argentina
si no estoy mal, python tiene el modulo md5 que puedes usar


2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:

> _______________________________________________
> pyar mailing list py...@python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
_______________________________________________
pyar mailing list py...@python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

Roberto Alsina

unread,
Jun 10, 2010, 3:12:55 PM6/10/10
to Python Argentina
On Thursday 10 June 2010 16:02:45 Ariel Marcelo Diaz wrote:
> si no estoy mal, python tiene el modulo md5 que puedes usar

md5 no encripta, es un hash [1], Lo que estaba pidiendo el mensaje original es
un procedimiento para encriptar con clave publica/privada.

Para eso, lo primero que da pypi es esto:
http://sourceforge.net/projects/cryptopy/

[1] http://en.wikipedia.org/wiki/Cryptographic_hash_function

Roberto Bozzacchi

unread,
Jun 10, 2010, 3:18:34 PM6/10/10
to Python Argentina
2010/6/10 Roberto Alsina <ral...@netmanagers.com.ar>

Para eso, lo primero que da pypi es esto:
http://sourceforge.net/projects/cryptopy/

Ya me lo anote para bajar la biblioteca en casa y probarla...
Gracias.

Roberto Bozzacchi

unread,
Jun 10, 2010, 3:26:12 PM6/10/10
to Python Argentina
Yo vi esto:

>>> import base64                                                           
>>> texto = "Prueba de codificacion Base64"                                 
>>> textocodificado = base64.encodestring(texto)                            
>>> textocodificado                                                          'UHJ1ZWJhIGRlIGNvZGlmaWNhY2lvbiBCYXNlNjQ=\n'                                
>>> base64.decodestring(textocodificado)                                    
'Prueba de codificacion Base64'                                             
>>>                                                                         

Pero supongo que cualquiera que llegue a la cadena puede probar usar la misma librería y decodificarla....
Por eso busco algo que sea utilizando una clave pública...

La idea general sería:

Tengo dos destinatarios: A y B
A le pasa su clave pública a B y viceversa

A con  B.Key encripta un mensaje y se lo envía a B
B con el programa lo puede desencriptar
B le responde a A usando A.Key

Se entiende la lógica del problema?

"Matías A. Bellone"

unread,
Jun 10, 2010, 3:28:08 PM6/10/10
to Python Argentina

Roberto Alsina

unread,
Jun 10, 2010, 3:32:11 PM6/10/10
to Python Argentina
On Thursday 10 June 2010 16:26:12 Roberto Bozzacchi wrote:
> Yo vi esto:
> >>> import base64
> >>>
> >>> texto = "Prueba de codificacion Base64"
> >>>
> >>> textocodificado = base64.encodestring(texto)
> >>>
> >>> textocodificado
>
> 'UHJ1ZWJhIGRlIGNvZGlmaWNhY2lvbiBCYXNlNjQ=\n'
>
> >>> base64.decodestring(textocodificado)
>
> 'Prueba de codificacion Base64'

Base64 no encripta, por lo menos no mucho :-)

O sea, no es para eso, originalmente es para poder meter caracteres no ASCII
en emails!

> Pero supongo que cualquiera que llegue a la cadena puede probar usar la
> misma librería y decodificarla....
> Por eso busco algo que sea utilizando una clave pública...
>
> La idea general sería:
>
> Tengo dos destinatarios: A y B
> A le pasa su clave pública a B y viceversa
>
> A con B.Key encripta un mensaje y se lo envía a B
> B con el programa lo puede desencriptar
> B le responde a A usando A.Key
>
> Se entiende la lógica del problema?

Sí, criptografía de clave pública y privada, es standard.

Roberto Bozzacchi

unread,
Jun 10, 2010, 3:33:21 PM6/10/10
to Python Argentina
El 10 de junio de 2010 16:32, Roberto Alsina <ral...@netmanagers.com.ar> escribió:
Sí, criptografía de clave pública y privada, es standard.

Yo tengo resuelto esto en Delphi, pero antes de ponerme a pasar lo que tengo en Delphi a Python, quería ver si ya había una biblioteca.... Para algunas cosas me gusta reinventar la rueda, pero en otras, cuando el tiempo apremia, prefiero ver si alguien ya lo hizo antes..... ja ja....

Gracias.

Roberto Alsina

unread,
Jun 10, 2010, 3:45:02 PM6/10/10
to Python Argentina

criptografía, a menos que la tengas muuuuuuy clara, no es para reinventar
nunca :-)

Roberto Bozzacchi

unread,
Jun 10, 2010, 4:15:25 PM6/10/10
to Python Argentina
El 10 de junio de 2010 16:45, Roberto Alsina <ral...@netmanagers.com.ar> escribió:
criptografía, a menos que la tengas muuuuuuy clara, no es para reinventar
nunca :-)

Totalmente de acuerdo.

Por eso voy a investigar este fin de semana esto:

http://doc.ubuntu-es.org/index.php?title=Crypt_Manager

Si alguien ya lo uso, le agradezco si me deja su impresión al respecto.

Marcelo Fernandez

unread,
Jun 10, 2010, 4:19:04 PM6/10/10
to Python Argentina
2010/6/10 Roberto Alsina <ral...@netmanagers.com.ar>:

> On Thursday 10 June 2010 16:02:45 Ariel Marcelo Diaz wrote:
>> si no estoy  mal, python tiene el modulo md5 que puedes usar
>
> md5 no encripta, es un hash [1], Lo que estaba pidiendo el mensaje original es
> un procedimiento para encriptar con clave publica/privada.
>
> Para eso, lo primero que da pypi es esto:
> http://sourceforge.net/projects/cryptopy/
>
> [1] http://en.wikipedia.org/wiki/Cryptographic_hash_function
>

+1, necesitás algo como DSA o RSA, que son algoritmos PKI [0] (estos
dos los usa SSH por ejemplo). La documentación el módulo crypto de la
stdlib no los trae, pero dice en la misma página:

"Hardcore cypherpunks will probably find the cryptographic modules
written by A.M. Kuchling of further interest; the package contains
modules for various encryption algorithms, most notably AES. These
modules are not distributed with Python but available separately. See
the URL http://www.amk.ca/python/code/crypto.html for more
information."

Entro en ese link y dice:

"I no longer maintain this package; the new maintainer is Dwayne C.
Litzenberger. Go to www.pycrypto.org to learn about current
development. Bugs and patches can be submitted using the pycrypto
project on Launchpad."

Al final, http://www.pycrypto.org me lleva a
http://www.dlitz.net/software/pycrypto/ . Ahí tenés que entrar, y acá
está la doc [3], que incluye varios algoritmos PKI (RSA, DSA y
ElGamal, por ej.,), bajo el apartado "Crypto.PublicKey". Hay lista de
correo y acá hay algunos ejemplos [4].

[0] http://en.wikipedia.org/wiki/Public_key_infrastructure
[1] http://www.dlitz.net/software/pycrypto/
[2] https://launchpad.net/pycrypto
[3] http://www.dlitz.net/software/pycrypto/apidoc/
[4] http://www.dlitz.net/software/pycrypto/doc/

Contá después como fue. :-)

Saludos
--
Marcelo F. Fernández
Buenos Aires, Argentina
Licenciado en Sistemas - CCNA

E-Mail: marcelo.fid...@gmail.com
Blog: http://blog.marcelofernandez.info
Twitter: http://twitter.com/fidelfernandez

Alejandro Santos

unread,
Jun 10, 2010, 10:00:29 PM6/10/10
to Python Argentina
2010/6/10 Roberto Alsina <ral...@netmanagers.com.ar>:

> On Thursday 10 June 2010 16:33:21 Roberto Bozzacchi wrote:
>>
>> Yo tengo resuelto esto en Delphi, pero antes de ponerme a pasar lo que
>> tengo en Delphi a Python, quería ver si ya había una biblioteca.... Para
>> algunas cosas me gusta reinventar la rueda, pero en otras, cuando el
>> tiempo apremia, prefiero ver si alguien ya lo hizo antes..... ja ja....
>
> criptografía, a menos que la tengas muuuuuuy clara, no es para reinventar
> nunca :-)

Eso mismo. *Nunca*.

Es terrible los inventos horribles con los que uno a veces se cruza...
hay un montón de cosas ya hechas listas para usar, y mucho más
seguras.

--
Alejandro Santos
http://www.alejolp.com.ar

Ramiro Morales

unread,
Jun 10, 2010, 10:34:42 PM6/10/10
to Python Argentina
2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:

Por lo que nos mostrás y si te interesa el tema como para leer
en inglés te sugeriría adquirir un poco de conocimiento básico
sobre el tema (muy apasionante por cierto).

Por ejemplo, leyendo el artículo de Wikipedia que te envió Roberto.
Un lindo recurso es este libro libremente disponible:

http://www.cacr.math.uwaterloo.ca/hac/

Suerte,

--
Ramiro Morales | http://rmorales.net

Roberto Bozzacchi

unread,
Jun 10, 2010, 10:38:34 PM6/10/10
to Python Argentina
Gracias muchachos,

Pero como ingeniero en sistemas vi muchas técnicas de encriptación.
Sólo busco algo que ya este implementado con Python, por que como dije antes, esta vez no tengo ganas de re-inventar la rueda... XD

Ya de por sí me trae malos recuerdos de la materia en la cual tuve que implementar mi propio algoritmo de encriptación y justificarlo...

En fin..... hay profesores que les gusta que uno siga reinventando la rueda....

Victor Declerk

unread,
Jun 10, 2010, 11:03:12 PM6/10/10
to Python Argentina
2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:

> Sólo busco algo que ya este implementado con Python, por que como dije
> antes, esta vez no tengo ganas de re-inventar la rueda... XD

¿Posiblemente esto?
http://code.google.com/p/python-gnupg/

Saludos.

Sebastian Bassi

unread,
Jun 11, 2010, 12:02:15 PM6/11/10
to Python Argentina
2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>

En fin..... hay profesores que les gusta que uno siga reinventando la rueda....  

Hay carreras donde se supone que te preparan para inventar ruedas, asi que puede ser justificable. Yo que no soy ingeniero puedo tratar una funcion de encriptación como una "caja negra" que solo me importa que parametros pasarle y que obtengo, pero el ingeniero se supone que tiene que poder construir dicha caja (sino, quien?).

Ricardo Armas

unread,
Jun 11, 2010, 12:10:12 PM6/11/10
to Python Argentina
2010/6/11 Sebastian Bassi <sba...@clubdelarazon.org>:
El científico.
Para eso están las licenciaturas y los doctorados.


--
Ricardo A. Armas

Roberto Alsina

unread,
Jun 11, 2010, 12:15:02 PM6/11/10
to Python Argentina

Alguien que estudió criptografía. (Un matemático, por ejemplo, como Turing
;-). No sé con qué profundidad se vé cripto en tu carrera, pero si se ve por
encima (o no tan a fondo) no estás capacitado para hacer algo como la gente en
el área.

O sea, yo te puedo leer la implementación de AES y la entiendo, leo como se
hace un intercambio DH y lo entiendo. Pero no me siento capacitado para
escribir una implementación ni cerca!

Es *muy* fácil equivocarse y es muy posible que no se note a menos que alguien
que sabe en serio lo audite, y a veces ni así.

Ejemplo:

http://digitaloffense.net/tools/debian-openssl/

Dionisio E Alonso

unread,
Jun 11, 2010, 12:17:22 PM6/11/10
to Python Argentina
2010/6/11 Roberto Alsina <ral...@netmanagers.com.ar>:

> On Friday 11 June 2010 13:02:15 Sebastian Bassi wrote:
>> 2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>
>>  En fin..... hay profesores que les gusta que uno siga reinventando la
>> rueda....
>>
>>
>> Hay carreras donde se supone que te preparan para inventar ruedas, asi que
>> puede ser justificable. Yo que no soy ingeniero puedo tratar una funcion
>> de encriptación como una "caja negra" que solo me importa que parametros
>> pasarle y que obtengo, pero el ingeniero se supone que tiene que poder
>> construir dicha caja (sino, quien?).
>
> Alguien que estudió criptografía. (Un matemático, por ejemplo, como Turing
> ;-). No sé con qué profundidad se vé cripto en tu carrera, pero si se ve por
> encima (o no tan a fondo) no estás capacitado para hacer algo como la gente en
> el área.
>
> O sea, yo te puedo leer la implementación de AES y la entiendo, leo como se
> hace un intercambio DH y lo entiendo. Pero no me siento capacitado para
> escribir una implementación ni cerca!
>

Já! eso porque no te pusieron nota dándote la implementación de tarea,
sino bien que te sentís capacitado :-)

--
d.

Ricardo Aráoz

unread,
Jun 11, 2010, 12:40:32 PM6/11/10
to Python Argentina
Alguien que sea licenciado en Ciencias de la Computación, en lugar de Ingeniero en sistemas.
Aunque en la realidad es muchas veces el ámbito de los matemáticos.


Ramiro Morales

unread,
Jun 11, 2010, 12:43:13 PM6/11/10
to Python Argentina
2010/6/11 Ricardo Armas <rar...@gmail.com>:

> 2010/6/11 Sebastian Bassi <sba...@clubdelarazon.org>:
>> 2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>
>>>
>>> En fin..... hay profesores que les gusta que uno siga reinventando la
>>> rueda....
>>
>> Hay carreras donde se supone que te preparan para inventar ruedas, asi que
>> puede ser justificable. Yo que no soy ingeniero puedo tratar una funcion de
>> encriptación como una "caja negra" que solo me importa que parametros
>> pasarle y que obtengo, pero el ingeniero se supone que tiene que poder
>> construir dicha caja (sino, quien?).
> El científico.
> Para eso están las licenciaturas y los doctorados.

Me parece que si es con fiones pedagogicos durante el cursado
de una materia no esta mal que. logicamente los docentes no
le van a pedir una implementación de calidad para
que supere una prueba del NIST.

De todas formas, parece que los conceptos basicos no fueron
enseñados o no fueron incorporados porque el querere usar
una hash function para cifrar es un error elemental que lamentablemente
se ve muy seguido.

De ahi que varios le enviáramos al OT enlaces a material
con info básica.

--
Ramiro Morales | http://rmorales.net

Roberto Alsina

unread,
Jun 11, 2010, 12:45:33 PM6/11/10
to Python Argentina
On Friday 11 June 2010 13:17:22 Dionisio E Alonso wrote:
> > O sea, yo te puedo leer la implementación de AES y la entiendo, leo como
> > se hace un intercambio DH y lo entiendo. Pero no me siento capacitado
> > para escribir una implementación ni cerca!
>
> Já! eso porque no te pusieron nota dándote la implementación de tarea,
> sino bien que te sentís capacitado :-)

Si me das una descripción del algo, te hago un AES. No te voy a hacer un BUEN
AES, pero para un TP zafa. Ahora, si lo que uno quiere es encriptar cosas...
preferiría uno bueno ;-)

Alejandro Santos

unread,
Jun 11, 2010, 12:56:52 PM6/11/10
to Python Argentina
2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:

>
> En fin..... hay profesores que les gusta que uno siga reinventando la
> rueda....

Reinventar la rueda está bueno para entender cómo funciona.

Un algoritmo de cifrado sencillo de implementar es el RC4, y en Python
serán menos de 20 lineas. Hoy en día está medio roto (es el que se usa
en las redes WiFi con claves WEP) pero para proteger datos no muy
valiosos alcanza.

http://en.wikipedia.org/wiki/RC4

--
Alejandro Santos
http://www.alejolp.com.ar

Roberto Alsina

unread,
Jun 11, 2010, 1:06:38 PM6/11/10
to Python Argentina
On Friday 11 June 2010 13:56:52 Alejandro Santos wrote:
> 2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:
> > En fin..... hay profesores que les gusta que uno siga reinventando la
> > rueda....
>
> Reinventar la rueda está bueno para entender cómo funciona.
>
> Un algoritmo de cifrado sencillo de implementar es el RC4, y en Python
> serán menos de 20 lineas. Hoy en día está medio roto (es el que se usa
> en las redes WiFi con claves WEP) pero para proteger datos no muy
> valiosos alcanza.

RSA en perl:

print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`

http://www.cypherspace.org/rsa/

Roberto Bozzacchi

unread,
Jun 11, 2010, 1:19:16 PM6/11/10
to Python Argentina
El 11 de junio de 2010 13:43, Ramiro Morales <cra...@gmail.com> escribió:
De todas formas, parece que los conceptos basicos no fueron
enseñados o no fueron incorporados porque el querere usar
una hash function para cifrar es un error elemental que lamentablemente
se ve muy seguido.

De ahi que varios le enviáramos al OT enlaces a material
con info básica.

--
Ramiro Morales  |  http://rmorales.net

Ramiro, permitime aclararte algo:

1) En ningún momento yo quise usar una hash function. Simplemente pedí información si había algo ya implementado.
2) En la facultad tuve que hacer en base a los métodos conocidos, un método propio de encriptación a modo de evaluación de los conocimientos no solo informáticos si no matemáticos ya que el mismo profesor lo teníamos tanto en una materia de matemáticas como de lógica aplicada a la informática.
3) También comenté que en Delphi hice una rutina pero básica y que prefería conocer algo que ya estuviera funcionando en Python.

Me parece que se hizo un embrollo bárbaro y quiero darles las gracias a todos puesto que ya tengo suficiente material y ya tengo para empezar a probar este fin de semana para encriptar y desencriptar paquetes.

Tengo que ver si lo puedo o no montar sobre un protocolo de transmisión.

Pero bueno, eso ya lo estoy viendo.. je..

Soy ingeniero en sistemas especializado en Bases de Datos e ingeniería de la información o minería de datos o Data Mining o como más les guste....

Tengo algunos conocimientos de Domótica/robótica y porgramación de microcontroladores.

Ahora a pedido de un amigo que tiene una empresa, me metí más en Python por que tiene los servidores en Linux.

(Al fin alguien que me pide algo en linux!!!)

Matías Bellone

unread,
Jun 11, 2010, 1:32:02 PM6/11/10
to Python Argentina
2010/6/11 Roberto Bozzacchi <rob...@metasigno.com>:

> Me parece que se hizo un embrollo bárbaro y quiero darles las gracias a
> todos puesto que ya tengo suficiente material y ya tengo para empezar a
> probar este fin de semana para encriptar y desencriptar paquetes.
>
> Tengo que ver si lo puedo o no montar sobre un protocolo de transmisión.

¿No podés usar SSL directamente?

http://docs.python.org/dev/library/ssl.html

Básicamente te abre un socket de comunicación a donde vos le digas con
las llaves que vos le digas y se encarga de todo lo complicado por
vos.

Además usás todas herramientas estándares para eso (minimizando
posibles errores). Hasta donde yo veo lo único que tendrías que hacer
es:

* Instalar tu aplicación
* Generar los certificados usando (por ejemplo) openssl - acá estarías
generando las claves pública/privada
* Asegurarte que los clientes acepten ese certificado
* Cobrar por tu trabajo :P

Saludos,
Toote

--
Web: http://www.enespanol.com.ar

Matigro

unread,
Jun 11, 2010, 1:34:51 PM6/11/10
to Python Argentina
El día 11 de junio de 2010 00:03, Victor Declerk
<victor....@gmail.com> escribió:

> 2010/6/10 Roberto Bozzacchi <rob...@metasigno.com>:
>> Sólo busco algo que ya este implementado con Python, por que como dije
>> antes, esta vez no tengo ganas de re-inventar la rueda... XD
>
> ¿Posiblemente esto?
> http://code.google.com/p/python-gnupg/
>
Arranqué buscando PGP, luego GPG y terminé en
http://wiki.python.org/moin/GnuPrivacyGuard


--
http://www.linkedin.com/in/matigro

Roberto Bozzacchi

unread,
Jun 11, 2010, 1:40:33 PM6/11/10
to Python Argentina
El 11 de junio de 2010 14:32, Matías Bellone <matias...@gmail.com> escribió:
¿No podés usar SSL directamente?

Lo había pensado.

Ahora bien, primero es la necesidad de encriptar un paquete y luego enviarlo por GPRS.
Tendría que ver si para ello me sirve el SSL.

Y como siempre, no te tiran de una toda la idea, te la van dando por partes y entonces primero me piden como enviar SMS o paquetes GPRS (Proyecto ya encaminado)
Luego me piden como encriptar mensajes antes de enviarlos.... ahí pensé en un algoritmo como el que plantee de PGP

Y bueno... esto lo tengo que ver el fin de semana, ya gracias a esta enorme comunidad, tengo suficiente material de lectrura, de prueba y algo voy a sacar andando...

Ramiro Morales

unread,
Jun 11, 2010, 2:23:48 PM6/11/10
to Python Argentina
2010/6/11 Roberto Bozzacchi <rob...@metasigno.com>:

> El 11 de junio de 2010 13:43, Ramiro Morales <cra...@gmail.com> escribió:
>>
>> De todas formas, parece que los conceptos basicos no fueron
>> enseñados o no fueron incorporados porque el querere usar
>> una hash function para cifrar es un error elemental que lamentablemente
>> se ve muy seguido.
>>
>> De ahi que varios le enviáramos al OT enlaces a material
>> con info básica.
>>
>> --
>> Ramiro Morales  |  http://rmorales.net
>
> Ramiro, permitime aclararte algo:
>
> 1) En ningún momento yo quise usar una hash function. Simplemente pedí
> información si había algo ya implementado.

Ah perdón, ahora que reviso el hilo lo que vos contabas era que habías analizado
era usar base64, MD5 lo había propuesto alguien mas.

respecto a la pregunat en sí, ya te pasaron el dato de pycrypto. Existe un
wrapper ezpycrypto con una API mas simple.

También hay una biblioteca mas reciente de la gente de Google:
Keyczar.

Suerte,

--
Ramiro Morales | http://rmorales.net

Roberto Bozzacchi

unread,
Jun 11, 2010, 2:27:26 PM6/11/10
to Python Argentina
El 11 de junio de 2010 15:23, Ramiro Morales <cra...@gmail.com> escribió:
respecto a la pregunat en sí, ya te pasaron el dato de pycrypto. Existe un
wrapper ezpycrypto con una API mas simple.

También hay una biblioteca mas reciente de la gente de Google:
Keyczar.

Suerte,

Gracias Ramiro.
Y si, cuanto más largo se hace el hilo, es fácil perderse! XD

Bueno, no tengo más que esperar a llegar a casa y terminar de definir el tema.
En mi trabajo es difícil que pueda por que trabajo bajo plataforma MS y SQL Server.
Reply all
Reply to author
Forward
0 new messages