Python Crypto.PublicKey RSA密钥大小是否为1?
我正在尝试使用Crypto.PublicKey.RSA编写一个简单的python方法,该方法返回RSA公钥的大小,但返回的数字始终是我期望的减去1的数字 例如,我给它一个1024位的键,从size()函数返回的数字是1023。我给它一个768位的键,我得到的数字是767 我错过了什么 代码的结果如下: 我希望返回1024:1023 POC Python2代码:Python Crypto.PublicKey RSA密钥大小是否为1?,python,cryptography,rsa,Python,Cryptography,Rsa,我正在尝试使用Crypto.PublicKey.RSA编写一个简单的python方法,该方法返回RSA公钥的大小,但返回的数字始终是我期望的减去1的数字 例如,我给它一个1024位的键,从size()函数返回的数字是1023。我给它一个768位的键,我得到的数字是767 我错过了什么 代码的结果如下: 我希望返回1024:1023 POC Python2代码: #!/usr/bin/python2 from Crypto.PublicKey import RSA from base64 imp
#!/usr/bin/python2
from Crypto.PublicKey import RSA
from base64 import b64decode
def computeRSAStrength(pubkey,verbose=None):
"""Compute and return RSA key strength given a public key"""
#TODO: add base64 validation on pubkey
#Format key and use python crypto libs to determine key strength
keyDER = b64decode(pubkey)
try:
#IMPORTANT PART
keyPub = RSA.importKey(keyDER)
keySize = int(keyPub.size()) #+ 1 ??? WHY DOES THIS RETURN (expected - 1) ???
#END IMPORTANT PART
except ValueError, e:
if verbose:
print 'ValueError Exception: {}'.format(e)
keySize = 0
# ALTERNATE METHOD?: use import os and make a syscall to openssl
if verbose:
print ' - Key in PEM format:'
print keyPub.exportKey('PEM')
return keySize
if __name__ == '__main__':
print 'I would expect this to read 1024: '+str(computeRSAStrength('MIGfMA0GCSqGSIb3DQEBA'+
'QUAA4GNADCBiQKBgQDLM0fpK/rhklYDRJSBQ6bSyZKjQxTeEnZywzodwGAjAste2aOQzXJyZmZrjHZ'+
'0JL6Gy/e351n1P0Yo0cVE4nEQ7WD9jo0cqVEmkf1SInnhN1FGX/pOTjrjh7QU398YFxks/rqnX6C1q'+
'doeu7B4wwRhNEHUjlaH79afYqOtk0ta0wIDAQAB'))
我不确定
\u RSAobj.size()
是否指的是钥匙的实际大小。这有点模糊,但文档中说明:
size(self)
Tell the maximum number of bits that can be handled by this key.
Returns:
int
Overrides: pubkey.pubkey.size
(inherited documentation)
我不确定,但它实际上可能意味着加密操作可以处理的最大明文位数(尽管您可以加密多达128字节/1024位明文)。代码会显式地从模中的位数中减去一,因此可以安全地将一个添加到size()
以获得模的大小
在上有一些似乎相关的信息。请原谅,我是新来的:(-根据您发布的链接:使用RSA完成的填充,可以处理的最大位数不是小于keysize-1吗?除了对openssl cli进行系统调用或使用其他第三方库之外,有没有更简单的方法在python中获取keysize?只需使用key.size()+1
。正如我所说,pycrypto源代码在size()
函数中显式地减去1,但在其他地方它会加1(例如在\u RSAobj.\uuu repr\uuu()
中)。