使用公钥加密字符串
我需要在Python中对一个字符串进行加密,使用的是公钥。
有没有人能给我一个例子或者推荐一下该怎么做?
4 个回答
2
我看了另一个回答中推荐的ezPyCrypto库。请不要使用这个库。它非常不完整,有些地方甚至是错误的,而且安全性很差。公钥算法有很多陷阱,需要小心实现。
比如,RSA消息应该使用像PKCS #1、OAEP这样的填充方案来确保安全。而这个库没有进行填充。DSA签名应该使用SHA1哈希函数,但这个库却用了已经被破解的MD5哈希,随机数生成还有更大的问题。因此,这个库的DSA实现既不符合标准,也不安全。ElGamal的实现也有问题。
遵循标准确实会让实现变得稍微复杂一些,但不遵循任何标准是不可行的。至少如果你关心安全性的话,这样做是不行的。
2
PyMe 是一个可以让你在 Python 里使用 GPGME 库的工具。
理论上,你可以通过这个工具在 Python 中和 GPG 进行互动,完成你需要的加密工作。
下面是来自 文档 的一个非常简单的代码示例:
这个程序并不适合用于真正的加密,只是为了举例说明!
import sys
from pyme import core, constants
# Set up our input and output buffers.
plain = core.Data('This is my message.')
cipher = core.Data()
# Initialize our context.
c = core.Context()
c.set_armor(1)
# Set up the recipients.
sys.stdout.write("Enter name of your recipient: ")
name = sys.stdin.readline().strip()
c.op_keylist_start(name, 0)
r = c.op_keylist_next()
# Do the encryption.
c.op_encrypt([r], 1, plain, cipher)
cipher.seek(0,0)
print cipher.read()
3
你需要一个Python的加密库来完成这个任务。
可以看看这个叫做 ezPyCrypto 的库:"为了应对一些其他的加密库,它们复杂得让人头疼,ezPyCrypto从一开始就设计得非常简单易用,同时也不牺牲安全性。"
它有一个API:
encString(self, raw)
看起来正是你需要的:"高级功能可以加密整个数据字符串,并将加密后的字符串以二进制形式返回。"