使用公钥加密字符串

2 投票
4 回答
3285 浏览
提问于 2025-04-15 12:29

我需要在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)

看起来正是你需要的:"高级功能可以加密整个数据字符串,并将加密后的字符串以二进制形式返回。"

撰写回答