首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中使用RSA私钥加密数据?

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

Stack Overflow用户
提问于 2016-06-27 03:06:58
回答 2查看 5.1K关注 0票数 3

我在Python2.7.1上安装了http://pythonhosted.org/pycrypto/包来执行一些加密操作。

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

Q2:文档中没有提到使用哪种哈希算法来计算签名!如何找出sign方法所使用的哈希函数?

Q3:您可以看到关于encrypt方法的部分文档:

encrypt(self, plaintext, K) 用RSA加密一段数据。 参数: 明文(字节字符串或长)-用RSA加密的数据块。它不可能比RSA模块(n)更大。 (审查!)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-27 03:54:52

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

您可能会想要交替地使用公钥和私钥,但是通常,给定私钥,您可以在不需要太多工作的情况下计算出公钥。所以,如果你给某人一个私钥,认为你会保证公钥的安全,那就不安全了。

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

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

我不熟悉pyCrypto,但在我看来,您在签名时会选择您最喜欢的散列。根据我在googled上搜索的例子,您可以将摘要提供给符号函数。

票数 4
EN

Stack Overflow用户

发布于 2020-01-06 14:24:58

作为一种解决方案,我遇到了以下问题:https://www.php2python.com/wiki/function.openssl-private-encrypt/

但是要小心,以理解使用私钥加密的含义。在我的例子中,我希望共享一个加密密钥,该密钥可以被具有硬编码公钥的软件读取。我可以使用签名,但是我希望密钥不能按原样共享,因此需要加密。唯一的选择是建立PKI或PGP。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38045324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档