Python Crypto RSA 加密密文长度异常

克里兹-雪特 发布于 2014/12/18 14:11
阅读 2K+
收藏 1

最近看了一下RSA加密的东西,然后用Python简单感受一下,结果遇到了麻烦。

平台:Archlinux,Python2/3,PyCrypto(package:python-crypto/python2-crypto)

# -*- coding: utf-8 -*-
from Crypto.PublicKey import RSA

# 这两个是偶然生成的密钥对, 1024bits
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 '

# 但是采用RSA加密之后, 其密文只有127字节
cipher = pub.encrypt(data, 0)[0]
print(len(cipher))

结果是127字节, 但理论上1024位密钥产生的密文长度应该为128字节,也即1024位才对

是我用错了还是这玩意本身的问题,望解答~~



加载中
0
克里兹-雪特
克里兹-雪特

我同样把问题发在StackOverFlow上, 有人回答说是因为_RSAobj对象的encrypt方法会无视开头的b'\x00'的值,所以才有127字节(开头0的字节被踢除了)。我测试了一下确实是这样的,而且不但返回值开头的0会被剔除,参数plaintext开头的0也会被无视。

解决办法:自己填充,或者使用PKCS1_OAEP/PKCS1_v1_5填充方案代替~

返回顶部
顶部