[英]Import RSA key into Python
我正在嘗試使用RSA.importkey
將RSA(公共)密鑰導入Python,但我不支持RSA密鑰 。
這是我編寫的代碼:
f = open('pub.key','rb')
data = f.read()
imported = RSA.importkey(data)
f.close()
這是我嘗試導入的密鑰的屏幕截圖: RSA_Public_Key
有人可以幫我嗎?
[更新]:我已經做過更多研究,並且密鑰是MS PUBLICKEYBLOB格式,我猜它與PyCrypto不兼容? 還有其他我可以用來導入的東西嗎
我不認為Python的Crypto.PublicKey模塊支持PUBLICKEYBLOB鍵,但它並不難 ,以提取有用的東西。
由於您以圖片的形式提供了數據( 請不要 ),因此,我將向您展示該過程如何使用此鍵進行工作 :
0000000: 0602 0000 00a4 0000 5253 4131 0008 0000 ........RSA1....
0000010: 0100 0100 7597 4c3b 8446 de2c 2af4 95a8 ....u.L;.F.,*...
0000020: 5dc0 cd6d dad7 d492 1e13 8234 6a70 8d8f ]..m.......4jp..
0000030: 7cf7 0492 557f f1a2 27b2 9e41 ac90 8091 |...U...'..A....
0000040: 1893 c2b1 7bad 2bf3 ffaf db2b 51be 1da3 ....{.+....+Q...
0000050: 27e3 a757 085a bec1 1df6 04f8 1cbe 5bb1 '..W.Z........[.
0000060: 67fb e4c8 da75 0070 b117 7024 6c09 6374 g....u.p..p$l.ct
0000070: ac4b 0a1d 71ae 7fae 65b8 c586 79c5 7e9f .K..q...e...y.~.
0000080: 9860 4c52 b929 62cb 2329 ed31 9174 7b7b .`LR.)b.#).1.t{{
0000090: 0b26 1bf2 7d67 bfda 7a40 daf2 614d 94a5 .&..}g..z@..aM..
00000a0: 7dad 596b ad9e a33a 39c6 5b6e 9fd2 bb36 }.Yk...:9.[n...6
00000b0: b5f5 d265 f52c 30d8 c117 bdaf 2800 9620 ...e.,0.....(..
00000c0: 46a7 2d62 030c d7d0 75a0 0b07 ead4 1fca F.-b....u.......
00000d0: e8d9 4edb 38f2 2675 cb12 a688 709b e1ea ..N.8.&u....p...
00000e0: 32dc f871 7250 41e6 1781 6827 428e dfe5 2..qrPA...h'B...
00000f0: dea1 72d9 3bfb e59d 3011 6992 cd60 2be2 ..r.;...0.i..`+.
0000100: d546 3c28 cf9d 304a f7ad b9fb 0f91 fe2e .F<(..0J........
0000110: be18 f1ce ....
您實際需要的僅有的兩條信息是公共指數e
和模數n
。 您可以在RSA1
令牌后的八個字節找到e
作為32位的小尾數。 在這種情況下, 01000100
是0x10001
或65537。鍵的其余部分是模數,該模數也按小端順序排列。
這是一些Python代碼,它將這些信息轉換為常規鍵:
from Crypto.PublicKey import RSA
e = 65537L
n = int('75974c3b8446de2c2af495a85dc0cd6ddad7d4921e1382346a708d8f7cf70492557ff1a2'\
'27b29e41ac9080911893c2b17bad2bf3ffafdb2b51be1da327e3a757085abec11df604f8'\
'1cbe5bb167fbe4c8da750070b11770246c096374ac4b0a1d71ae7fae65b8c58679c57e9f'\
'98604c52b92962cb2329ed3191747b7b0b261bf27d67bfda7a40daf2614d94a57dad596b'\
'ad9ea33a39c65b6e9fd2bb36b5f5d265f52c30d8c117bdaf2800962046a72d62030cd7d0'\
'75a00b07ead41fcae8d94edb38f22675cb12a688709be1ea32dcf871725041e617816827'\
'428edfe5dea172d93bfbe59d30116992cd602be2d5463c28cf9d304af7adb9fb0f91fe2e'\
'be18f1ce'.decode('hex')[::-1].encode('hex'), 16)
key_params = (n, e)
pub_key = RSA.construct(key_params)
print pub_key.exportKey()
這是輸出:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzvEYvi7+kQ/7ua33SjCd
zyg8RtXiK2DNkmkRMJ3l+zvZcqHe5d+OQidogRfmQVBycfjcMurhm3CIphLLdSby
ONtO2ejKH9TqBwugddDXDANiLadGIJYAKK+9F8HYMCz1ZdL1tTa70p9uW8Y5OqOe
rWtZrX2llE1h8tpAetq/Z33yGyYLe3t0kTHtKSPLYim5UkxgmJ9+xXmGxbhlrn+u
cR0KS6x0YwlsJHAXsXAAddrI5PtnsVu+HPgE9h3BvloIV6fjJ6MdvlEr26//8yut
e7HCkxiRgJCsQZ6yJ6Lxf1WSBPd8j41wajSCEx6S1Nfabc3AXaiV9Cos3kaEO0yX
dQIDAQAB
-----END PUBLIC KEY-----
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.