Python Crypto.PublicKey RSA密钥大小是否为1?

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

我正在尝试使用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 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()
中)。