python - txt - desencriptar cifrado cesar
cifrar/descifrar simple lib en python con clave privada (5)
¿Hay alguna manera simple de encriptar / desencriptar una cadena con una clave?
algo así como:
key = ''1234''
string = ''hello world''
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)
no pude encontrar nada simple para hacer eso.
Expandir la respuesta de dsamersoff. Esto es simple e inseguro, pero para ciertas tareas puede ser útil. aquí hay un código:
import crypt
import getpass
import os.path
def auth_func():
return (raw_input(''Username:''), getpass.getpass(''Password:''))
def xor(a,b):
assert len(b) >= len(a)
return "".join([chr( ord(a[i]) ^ ord(b[i])) for i in range(len(a))])
# create a new credentials file if needed
if not os.path.exists(''cred''):
with open(''cred'', ''w'') as f:
user, pwd = auth_func()
f.write ("{}/n".format(user))
f.write ("{}/n".format(xor(pwd, crypt.crypt(''secret'', ''words''))))
f.close()
# read credentials and print user/password
with open(''cred'', ''r'') as f:
user, pwd = f.read().split(''/n'')[:2]
print user
print xor(pwd, crypt.crypt(''secret'', ''words''))
La manera más simple y rápida de encriptar fragmentos de texto cortos con claves pregrabadas es utilizar una de las funciones de criptohash (md5, sha, etc.).
es decir, calcule md5 de su clave, luego x o su fragmento de cuerda con este hash md5. si necesita codificar texto fragmen más largo que la longitud de md5 - haga md5 (md5 hash) y encripte el próximo fragmento.
La seguridad de esta solución es peor que con 3-DES, pero es suficiente en el caso promedio (es decir, almacenar una contraseña no muy segura en el archivo de configuración) y no requiere nada además de la distribución básica de Python.
Si necesita una mejor seguridad, busque una implementación de AES, Blowfish, etc., pero para beneficiar realmente a AES, debe hacer un trabajo adicional para mezclar sus datos con los aleatorios.
para Python 2, debes usar keyczar http://www.keyczar.org/
para python 3, hasta que keyczar esté disponible, he escrito simple-crypt http://pypi.python.org/pypi/simple-crypt
Estoy respondiendo esto dos años tarde porque las cosas han cambiado desde que se hizo la pregunta.
tenga en cuenta que las respuestas anteriores a esta pregunta utilizan cifrados débiles (según los estándares actuales) y no tienen ningún fortalecimiento clave. las dos recomendaciones aquí son probablemente más seguras.
pyDES es una implementación DES y Triple-DES completamente escrita en python.
Aquí hay un ejemplo simple y portátil que debería ser lo suficientemente seguro para las necesidades básicas de cifrado de cadenas. Simplemente coloque el módulo pyDES en la misma carpeta que su programa y pruébelo:
Computadora del remitente
>>> from pyDES import * # pyDes if installed from pip
>>> ciphertext = triple_des(''a 16 or 24 byte password'').encrypt("secret message", padmode=2) #plain-text usually needs padding, but padmode = 2 handles that automatically
>>> ciphertext
'')/xd8/xbfFn#EY/xcbiH/xfa/x18/xb4/xf7/xa2'' #gibberish
Computadora del destinatario
>>> from pyDES import *
>>> plain_text = triple_des(''a 16 or 24 byte password'').decrypt('')/xd8/xbfFn#EY/xcbiH/xfa/x18/xb4/xf7/xa2'', padmode=2)
>>> plain_text
"secret message"
http://www.dlitz.net/software/pycrypto/ debe hacer lo que quiera.
Tomado de su página de documentos.
>>> from Crypto.Cipher import DES
>>> obj=DES.new(''abcdefgh'', DES.MODE_ECB)
>>> plain="Guido van Rossum is a space alien."
>>> len(plain)
34
>>> obj.encrypt(plain)
Traceback (innermost last):
File "<stdin>", line 1, in ?
ValueError: Strings for DES must be a multiple of 8 in length
>>> ciph=obj.encrypt(plain+''XXXXXX'')
>>> ciph
''/021,/343Nq/214DY/337T/342pA/372/255/311s/210/363,/300j/330/250/312/347/342I/3215w/03561/303dgb//006''
>>> obj.decrypt(ciph)
''Guido van Rossum is a space alien.XXXXXX''