首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python密码RSA,127个字节长的1024位密钥密码

Python密码RSA,127个字节长的1024位密钥密码
EN

Stack Overflow用户
提问于 2014-12-18 07:06:38
回答 1查看 1.8K关注 0票数 2

当我使用PyCrypto (Archlinux,package: PyCrypto/python2-crypto)在笔记本电脑上测试RSA加密时,我使用了一个由RSA模块生成的1024个密钥来加密随机数据,它产生了127个字节长的密码。

下面是一个简单的代码:(我在调试时得到了值)

代码语言:javascript
复制
from Crypto.PublicKey import RSA
pubkey = b'-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDq+qbaMTZtPH3LuXLrAn37YGzc\ngrL7ieTILtkXTl5PIozJUQZ06bQXr/uS+FtvYNSvaT53ZpSyKmVmWtoX7lFzA6FW\nsILFTgFUDNRnPIQv1rQb16wi694rKPRe1uIr8/hthXtTec8b2aJovizQOlkXY0Pq\nZohNGofi02xlUD8KsQIDAQAB\n-----END PUBLIC KEY-----'
prikey = b'-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDq+qbaMTZtPH3LuXLrAn37YGzcgrL7ieTILtkXTl5PIozJUQZ0\n6bQXr/uS+FtvYNSvaT53ZpSyKmVmWtoX7lFzA6FWsILFTgFUDNRnPIQv1rQb16wi\n694rKPRe1uIr8/hthXtTec8b2aJovizQOlkXY0PqZohNGofi02xlUD8KsQIDAQAB\nAoGBAMkKEI0ng8Br+9i8XqTQ6gaTVjBHpmhtbw8SfexhwXCFR9zJ9PM8LDgD+gKh\neGFPgEhfi/FOE7Rnb3/mBShqXsWbqz7STJ05GOxtKo+L1z5K7X4E9WmVjIEVU46I\nhF43LJQvoDjQRbZh2cUMSYUR8+LqJJd6MFdhLJhEIf+LhCbBAkEA71lRBiSwZH/8\nsaUE4qZ/vxkS65czBcWLSCgn+7D/kvunX1hxqi3zTxMn4gyluw3IICzvLFgdDG6f\nUZk23aDcyQJBAPtTgvi4lYAIoeh6Xx8NZxroVNVBlP9BzJTBCcnX1Ym0aC/p+6n8\n7Lu9bkKk/hb0r7Oy76wzxObWv9uvRQNp+qkCQQCoOy8oEkGpYgxLEKIObNj9iLIz\nxWKne+IaJZ902UPKG/fYnGHIK+QIgH5X9GvIvjcb5nl1wbkpM9fnkrltrdOBAkBe\n7LbuHEGTHy+P8BBXWSeVOSU5etC87GxJzvNUginMHhCv8C82kCoV6sFneIvjvb1T\nIQV3RAJdscS7Q+LMHE4pAkEAzp2o8+2+9QJwzkpxGyNjJ7ZECQsZIb7MOH7LYhX0\ncnwffXFt4ttcwbyX2SdhCVPBDkczkJkOzcnEqtjoWt+dBw==\n-----END RSA PRIVATE KEY-----'

pub = RSA.importKey(pubkey)
data = b'\xc9\xc5\xa9\x1b\xc2\x0f\x05\xf0\xe3\xe1W\x9d\x94b\xc6 '
cipher = pub.encrypt(data, 0)[0]
print(len(cipher))

这将打印127 (通常是128个对于1024位键),我不知道为什么。

EN

回答 1

Stack Overflow用户

发布于 2014-12-28 13:59:03

您没有使用正确的加密方案。从文件中:

即使您可以选择直接使用RSA密钥对象的方法来执行原始密码操作(例如_RSAobj.encrypt),但建议使用一种标准化方案(如Crypto.Cipher.PKCS1_v1_5Crypto.Signature.PKCS1_v1_5)。

尽管现在,更现代/更安全的Crypto.Cipher.PKCS1_OAEP应该比Crypto.Cipher.PKCS1_v1_5更好。

如果使用这些方案之一,则输出将始终为128字节。原因是PKCS#1指定了一个名为I2OSP的函数,它将模幂的结果(它是一个以模/键大小为界的数字)转换为一个静态的八进制数,确切地说是键大小。

直接加密函数的输出就是所谓的原始或教科书RSA:仅仅是模幂。这将只返回数字,它可能有前导零位。有多少取决于偶然性,(在某种程度上)取决于模数的值以及是否使用有符号或无符号编码。

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

https://stackoverflow.com/questions/27540956

复制
相关文章

相似问题

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