Python中使用私钥的简单加解密库

27 投票
5 回答
55716 浏览
提问于 2025-04-16 04:42

有没有简单的方法可以用一个密钥来加密或解密一个字符串呢?

就像这样:

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'

撰写回答