[pyar] Como encriptar una clave en el código fuente?

Claudio Freire klaussfreire en gmail.com
Jue Dic 30 11:50:38 ART 2010


2010/12/30 Elias <copybin en gmail.com>

>
> Buenas, estoy haciendo una aplicación que se conecta por FTP, la clave del
> FTP no quiero que la vean los usuarios del programa. (la clave del ftp la
> quiero dejar junto con el fuente)
> Entonces estoy buscando la forma de encriptar la clave con algo, y luego
> desencriptarla en el momento justo.
> Busco que la clave no quede legible fácilmente.
>
> Que sugieren?
>

Tordek te dio la posta.

No podés hacerlo bien.

Sólo podés obfuscar, y para obfuscar diría que hay muchísimas maneras de
hacerlo.

Una popular, es encriptar con algún algoritmo estándar (diagmos... DES, AES,
blowfish...) usando de clave para la encriptación/desencriptación el hmac
(fijate el módulo hmac) de algún archivo de tu aplicación (ojo cuando lo
cambies), y poniéndole de clave al HMAC alguna cadena obfuscada (ej,
'aG9sYQ=='.decode('base64'))

Toooodo eso, lo único que hace es que un usuario SIN GANAS no pueda obtener
la contraseña. Pero con un poquito de ganas (léase, inspeccionar el código y
correrlo en un intérprete de python), es trivial obtenerla, así que SEGURO
NO ES.

Podés hacer algo más difícil el proceso de obtener la contraseña, si el
módulo que la calcula está en bytecode, y no en fuente. Pero no es gran
impedimento eso tampoco. Simplemente evita que sea tan fácil como abrir el
archivo con un editor de texto.

Una manera igualmente segura (porque todas son inseguras) y muchísimo más
sencilla, es un cifrado de sustitución básico:

import random

rng = random.Random(234789) # seed tuya
translator = range(256)
rng.shuffle(translator)
translator = ''.join(map(chr, translator))
itranslator = ''.join(map(chr,map(translator.index, map(chr,range(256)))))

def getPassword():
    return 'u]%%+;\xe7\x1e\x93;T\x08\xd4%\xf8]\x1e;'.translate(itranslator)



El password obfuscado lo obtuve con:

"password obfuscado".translate(translator)

Igual, un atacante lo único que tiene que hacer para obtener el password es
llamar a esa función. Muy choto.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101230/a94d4b6c/attachment.html>


More information about the pyar mailing list