Rsa
如何創建用於儲存 RSA 密鑰的 PEM 文件?
我有一個 RSA 私鑰 $ {d,n} $ 和一個公鑰 $ {e,n} $ , 在哪裡 $ n $ 是模數,我也有素因數 $ p $ 和 $ q $ 的 $ n $ .
我想創建一個包含此資訊的 PEM 文件,以便我可以使用 OpenSSL 解密使用公鑰加密的文件。我怎樣才能做到這一點?
RFC 2313
RSAPrivateKey
將ASN1 結構指定為SEQUENCE
包含INTEGER
s
- $ 0 $ ;
- $ n $ ;
- $ e $ ;
- $ d $ ;
- $ p $ ;
- $ q $ ;
- $ d\bmod(p-1) $ ;
- $ d\bmod(q-1) $ ;
- $ q^{-1}\bmod p $ .
PEM 格式由編碼為 Base64 的結構組成,並由典型的
BEGIN/END RSA PRIVATE KEY
頁眉和頁腳行構成。因此,您可以使用任何您喜歡的 ASN1 庫來對私鑰參數進行編碼。例如,使用 Python 的
pyasn1
模組,可以得到一個私鑰文件的內容,如下所示:import pyasn1.codec.der.encoder import pyasn1.type.univ import base64 def pempriv(n, e, d, p, q, dP, dQ, qInv): template = '-----BEGIN RSA PRIVATE KEY-----\n{}-----END RSA PRIVATE KEY-----\n' seq = pyasn1.type.univ.Sequence() for i,x in enumerate((0, n, e, d, p, q, dP, dQ, qInv)): seq.setComponentByPosition(i, pyasn1.type.univ.Integer(x)) der = pyasn1.codec.der.encoder.encode(seq) return template.format(base64.encodebytes(der).decode('ascii'))
參數
dP
,dQ
和qInv
最容易(如:程式碼行)計算如下:dP = d % (p-1) dQ = d % (q-1) qInv = pow(q, p-2, p)