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