Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Crypto RSA,127字节长的密码,具有1024位密钥_Python_Encryption_Rsa_Pycrypto - Fatal编程技术网

Python Crypto RSA,127字节长的密码,具有1024位密钥

Python Crypto RSA,127字节长的密码,具有1024位密钥,python,encryption,rsa,pycrypto,Python,Encryption,Rsa,Pycrypto,当我在笔记本电脑上使用PyCrypto(Archlinux,包:python crypto/python2 crypto)测试RSA加密时,我使用RSA模块生成的1024个密钥加密随机数据,它生成了一个127字节长的密码 下面是一个简单的代码:(我在调试时得到了值) 这将打印127(对于1024位密钥,通常是128),我不知道为什么。您没有使用正确的加密方案。从文件中: 即使您可以选择直接使用RSA密钥对象的方法来执行基本加密操作(例如,\u RSAobj.encrypt),建议使用标准化方案之

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

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


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

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

即使您可以选择直接使用RSA密钥对象的方法来执行基本加密操作(例如,
\u RSAobj.encrypt
),建议使用标准化方案之一(例如
Crypto.Cipher.PKCS1\u v1\u 5
Crypto.Signature.PKCS1\u v1\u 5

虽然现在更现代/更安全的
Crypto.Cipher.PKCS1\u OAEP
应该优先于
Crypto.Cipher.PKCS1\u v1\u 5

如果使用这些方案之一,则输出将始终为128字节。原因是PKCS#1指定了一个名为I2OSP的函数,该函数将模幂运算(由模/密钥大小限定的数字)的结果转换为静态的八位字节数,即密钥大小


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

加密方法仅抑制所有前导零字节。如果你想的话,你可以很容易地重新组合这些。哦,我明白了。这就是为什么它会建议使用Crypto.Cipher.PKCS1_OAEP/PKCS1_v1_5来代替。谢谢~@GregS,这并不是一个真正的解决方案,因为它会给你留下一个不安全的算法,尽管totran似乎已经找到了。好吧,你已经找到了替代方案,但我想还需要一些额外的解释,特别是对其他读者:)
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))