Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python从公钥中获取RSA指数和模_Python_Hex_Rsa_Asn.1 - Fatal编程技术网

用Python从公钥中获取RSA指数和模

用Python从公钥中获取RSA指数和模,python,hex,rsa,asn.1,Python,Hex,Rsa,Asn.1,我知道如何使用openssl从公钥获取RSA模和指数,但现在我尝试使用Python。我已经看到并遵循了这些步骤 假设这是公钥: -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw QmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw GVWE205u7DhtRe85W1oR9WTsMact5

我知道如何使用openssl从公钥获取RSA模和指数,但现在我尝试使用Python。我已经看到并遵循了这些步骤

假设这是公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw
QmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw
GVWE205u7DhtRe85W1oR9WTsMact5wuqU6okJd2GKrEGotgd9iuAJm90N6TDeDZ4
KHEvVEE1yTyvrxQgkwIDAQAB
-----END PUBLIC KEY-----
首先,从base64解码公钥:

import base64
bytearray = base64.b64decode("""MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw
QmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw
GVWE205u7DhtRe85W1oR9WTsMact5wuqU6okJd2GKrEGotgd9iuAJm90N6TDeDZ4
KHEvVEE1yTyvrxQgkwIDAQAB""")
print(bytearray)
输出


[代码>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93\x95y\x8bep\x19U\x84\xdbNn\xec8mE\xef9我不是这方面的专家,但我认为

十六进制表示中的最后6个字节用于计算指数

'02'->此字节用于声明指数类型,即整数

'03'->此字节表示它是一个3字节长的数字


“01:00:01”->这3个字节代表指数。

我不是这方面的专家,但我认为

十六进制表示中的最后6个字节用于计算指数

'02'->此字节用于声明指数类型,即整数

'03'->此字节表示它是一个3字节长的数字


“01:00:01”->这3个字节表示指数。

公钥采用ASN.1格式,在Java世界中也称为X509EncodedKeySpec。许多加密包可以直接导入此类对象

例如,使用和,下面的代码段

from Crypto.PublicKey import RSA
key_encoded='''-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw
QmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw
GVWE205u7DhtRe85W1oR9WTsMact5wuqU6okJd2GKrEGotgd9iuAJm90N6TDeDZ4
KHEvVEE1yTyvrxQgkwIDAQAB
-----END PUBLIC KEY-----'''


pubkey = RSA.importKey(key_encoded)
print(pubkey.n)
print(pubkey.e)

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

pubkey2 = serialization.load_pem_public_key(
    key_encoded.encode('ascii'),
    backend=default_backend()
)

print(pubkey2.public_numbers().n)
print(pubkey2.public_numbers().e)
产生

1105246221842981894066963669813628673201315270486834928111282046617453885105051453894595180391754944491840562072269872225463562457663863583542602215983244974859895901721103290598894007040899410509025132024466073390787607684436994809973101281395977457563633796508215582868687804307
65537
110524622184298189406696366981362867320131527048683492811128204661745388510505145389459518039217549444918405620726988722254633562452576638635488354260221598432448974859895979017211032905988949400704082939941050902513120244660937339078367607684436944094809985731012813959774525636937965082155868293686780764307
65537

公钥采用ASN.1格式,在Java世界中也称为X509EncodedKeySpec。许多crypt包可以直接导入此类对象

例如,使用和,下面的代码段

from Crypto.PublicKey import RSA
key_encoded='''-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdZGziIrJOlRomzh7M9qzo4ibw
QmwORcVDI0dsfUICLUVRdUN+MJ8ELd55NKsfYy4dZodWX7AmdN02zm1Gk5V5i2Vw
GVWE205u7DhtRe85W1oR9WTsMact5wuqU6okJd2GKrEGotgd9iuAJm90N6TDeDZ4
KHEvVEE1yTyvrxQgkwIDAQAB
-----END PUBLIC KEY-----'''


pubkey = RSA.importKey(key_encoded)
print(pubkey.n)
print(pubkey.e)

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

pubkey2 = serialization.load_pem_public_key(
    key_encoded.encode('ascii'),
    backend=default_backend()
)

print(pubkey2.public_numbers().n)
print(pubkey2.public_numbers().e)
产生

1105246221842981894066963669813628673201315270486834928111282046617453885105051453894595180391754944491840562072269872225463562457663863583542602215983244974859895901721103290598894007040899410509025132024466073390787607684436994809973101281395977457563633796508215582868687804307
65537
110524622184298189406696366981362867320131527048683492811128204661745388510505145389459518039217549444918405620726988722254633562452576638635488354260221598432448974859895979017211032905988949400704082939941050902513120244660937339078367607684436944094809985731012813959774525636937965082155868293686780764307
65537

你是对的。考虑到在大多数情况下2^16+1是指数的值,获取指数会很容易,但获取公共模似乎没有什么困难,因为创建公共模n的质数p和q的大小和长度是完全随机的。尽管我认为,asn.1中有一些特定的语法res指数和模。你是对的。考虑到在大多数情况下2^16+1是它的值,获取指数会很容易,但获取公共模似乎没有什么困难,因为创建公共模n的素数p和q的大小和长度是完全随机的。尽管我认为,有一些特定的语法in asn.1声明指数和模。根据上面的PyCrypto示例,你能澄清在线工具中使用的模吗?@Lijo:Huh?该链接与此答案无关。无法从Crypto.PublicKey中找到rsa函数。你能澄清在线工具中使用的模吗,基于在上面的PyCrypto示例中?@Lijo:Huh?该链接与此答案无关。无法从Crypto.PublicKey中找到rsa函数。。