gpt4 book ai didi

python - Crypto.PublicKey RSA key 大小减一?

转载 作者:行者123 更新时间:2023-11-28 17:40:49 25 4
gpt4 key购买 nike

我正在尝试使用 Crypto.PublicKey.RSA 编写一个简单的 python 方法,该方法返回 RSA 公钥的大小,但返回的数字始终是我期望的数字负 1。

例如,我给它一个 1024 位的 key ,我从 size() 函数返回的数字是 1023。我给它一个 768 位的 key ,我返回的数字是 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'))

最佳答案

我不确定 _RSAobj.size() 指的是 key 的实际大小。这有点含糊,但 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 位明文)。该代码明确地从模数中的位数中减去 1,因此将 size() 加 1 以获得模数大小是安全的。

https://security.stackexchange.com/q/44702 上有一些看似相关的信息.

关于python - Crypto.PublicKey RSA key 大小减一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com