Python中使用私钥的简单加解密库
有没有简单的方法可以用一个密钥来加密或解密一个字符串呢?
就像这样:
key = '1234'
string = 'hello world'
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)
我找不到什么简单的方法来做到这一点。
5 个回答
11
对于Python 2,你应该使用keyczar,网址是 http://www.keyczar.org/
对于Python 3,在keyczar还没有推出之前,我写了一个叫做simple-crypt的库,网址是 http://pypi.python.org/pypi/simple-crypt
我现在回答这个问题已经晚了两年,因为自从提问以来情况发生了变化。
需要注意的是,之前对这个问题的回答使用了一些在今天看来比较弱的加密方法,并且没有进行任何密钥增强。而这里推荐的两个方法可能会更安全。
28
pyDES 是一个用 Python 完全实现的 DES 和 Triple-DES 加密工具。
这里有一个简单易用的例子,适合基本的字符串加密需求。只需将 pyDES 模块放在和你的程序同一个文件夹里,就可以试试了:
发送方的电脑
>>> 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
接收方的电脑
>>> 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"
在 Python3
中,你可能会在接收方的电脑的代码里遇到一个错误。
ValueError: pyDes can only work with encoded strings, not Unicode.
from pyDes import *
a = b')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2'
plain_text = triple_des('a 16 or 24 byte password').decrypt(a, padmode=2)
print(plain_text)
只需在加密文本的开头加上b
。为了让代码更清晰,可以把它赋值给一个新变量(在这个例子中是a
),然后用正常的方式解密a
。
24
你可以去这个网址:http://www.dlitz.net/software/pycrypto/,它应该能满足你的需求。
这段话是从他们的文档页面上摘下来的。
>>> 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'