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



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

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

from Crypto.PublicKey import RSA
pubkey = b'-----BEGIN PUBLIC KEY-----nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDq+qbaMTZtPH3LuXLrAn37YGzcngrL7ieTILtkXTl5PIozJUQZ06bQXr/uS+FtvYNSvaT53ZpSyKmVmWtoX7lFzA6FWnsILFTgFUDNRnPIQv1rQb16wi694rKPRe1uIr8/hthXtTec8b2aJovizQOlkXY0PqnZohNGofi02xlUD8KsQIDAQABn-----END PUBLIC KEY-----'
prikey = b'-----BEGIN RSA PRIVATE KEY-----nMIICXgIBAAKBgQDq+qbaMTZtPH3LuXLrAn37YGzcgrL7ieTILtkXTl5PIozJUQZ0n6bQXr/uS+FtvYNSvaT53ZpSyKmVmWtoX7lFzA6FWsILFTgFUDNRnPIQv1rQb16win694rKPRe1uIr8/hthXtTec8b2aJovizQOlkXY0PqZohNGofi02xlUD8KsQIDAQABnAoGBAMkKEI0ng8Br+9i8XqTQ6gaTVjBHpmhtbw8SfexhwXCFR9zJ9PM8LDgD+gKhneGFPgEhfi/FOE7Rnb3/mBShqXsWbqz7STJ05GOxtKo+L1z5K7X4E9WmVjIEVU46InhF43LJQvoDjQRbZh2cUMSYUR8+LqJJd6MFdhLJhEIf+LhCbBAkEA71lRBiSwZH/8nsaUE4qZ/vxkS65czBcWLSCgn+7D/kvunX1hxqi3zTxMn4gyluw3IICzvLFgdDG6fnUZk23aDcyQJBAPtTgvi4lYAIoeh6Xx8NZxroVNVBlP9BzJTBCcnX1Ym0aC/p+6n8n7Lu9bkKk/hb0r7Oy76wzxObWv9uvRQNp+qkCQQCoOy8oEkGpYgxLEKIObNj9iLIznxWKne+IaJZ902UPKG/fYnGHIK+QIgH5X9GvIvjcb5nl1wbkpM9fnkrltrdOBAkBen7LbuHEGTHy+P8BBXWSeVOSU5etC87GxJzvNUginMHhCv8C82kCoV6sFneIvjvb1TnIQV3RAJdscS7Q+LMHE4pAkEAzp2o8+2+9QJwzkpxGyNjJ7ZECQsZIb7MOH7LYhX0ncnwffXFt4ttcwbyX2SdhCVPBDkczkJkOzcnEqtjoWt+dBw==n-----END RSA PRIVATE KEY-----'
pub = RSA.importKey(pubkey)
data = b'xc9xc5xa9x1bxc2x0fx05xf0xe3xe1Wx9dx94bxc6 '
cipher = pub.encrypt(data, 0)[0]
print(len(cipher))

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

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

即使您可以选择直接使用 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:只是模幂。这将只返回数字,该数字可能具有前导零位。多少取决于偶然性,(在某种程度上(取决于模量的值以及是否使用有符号或无符号编码。

相关内容

  • 没有找到相关文章

最新更新