gpt4 book ai didi

python - 如何在python中使用RSA私钥加密数据?

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:51 25 4
gpt4 key购买 nike

我已经安装了 pyCrypto 包在 Python 2.7.1 上做一些加密操作。

Q1:我想做的操作是用private Key(而不是public Key)加密一些数据。这个库好像做不到。我对吗?如果是这样,是否有任何图书馆能够做到这一点?

Q2:documentation没有提到使用哪种哈希算法来计算签名!如何找出 sign 方法使用了哪个哈希函数?

Q3:您会看到有关 encrypt 方法的文档的一部分:

encrypt(self, plaintext, K)

Encrypt a piece of data with RSA.

Parameters:

plaintext (byte string or long) - The piece of data to encrypt with RSA. It may not be numerically larger than the RSA module (n).

(Censored!)

正如您在上面看到的,输入数据仅限于那些在数值上不大于 RSA 模块的数据。这是否意味着我无法使用模块 = 0x11...(257 bytes) 的 RSA key 对加密 0x21...(257 bytes)(例如) 因为 0x21 大于 0x11?如果是这样,为什么?每次都比较加密前的值是不是很奇怪?!还是仅仅意味着数据长度必须等于或小于模块长度?

最佳答案

在公钥密码学中,您不用私钥加密——您总是使用公钥。否则,由于公钥是“公开的”,任何人都可以解密密文。

您可能想交替使用公钥和私钥,但一般来说,给定私钥,您无需太多工作就可以计算出公钥。因此,如果您将私钥提供给某人并认为您会保证公钥的安全,那么它就不安全了。

当他们说不大于模数时,他们指的是字节大小。它实际上会小于模数的大小(2048 位 RSA key 对为 256 字节)。但数据实际上应该小于模块,因为您将希望始终 填充数据。填充,例如使用 OAEP 填充,随机化密文。每次加密相同的明文时,您都会得到看起来随机的不同密文。这很重要,因为否则即使攻击者没有私钥,密文也很脆弱并且容易受到攻击。因此,您想为数据和填充留出一些空间以适应模数(例如 256 字节)。

通常,您使用私钥进行签名。在 RSA 中,这实际上使用私钥“加密”,但我认为您不会在任何流行的 API 中找到“使用私钥加密”。

我不熟悉 pyCrypto,但在我看来,您在签名时会选择自己喜欢的哈希值。你自己散列,并将摘要提供给 sign 函数,据我从我搜索过的示例中可以看出。

关于python - 如何在python中使用RSA私钥加密数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com