這是一個RSA在VB.NET項目中的示例。
STEP 1
首先,你必須格式化N,E,P,Q,DP,DQ,InverseQ,d關鍵數據(所有的人!後來見)用base64並與他們建立一個XML結構的字符串(或文件)是這樣的:
<RSAKeyValue>
<Modulus>vbBYUkGHX4YI1Rcovx+Ewz2OW1Iix</Modulus>
<Exponent>AQ...</Exponent>
<P>5w/iuGIBZdTYasdfalksdkkdkdksdldfdfs</P>
<Q>0ilXTMYjwhp+JvQPo3gnRAF0EgoHPm6tBt1</Q>
<DP>JS2gLEzQrsLlnlkQCRZ55+RtM6cphJSa5x</DP>
<DQ>RMWugbsdHHma6phXPcEl6EUpfHW3pSCGko</DQ>
<InverseQ>h54IMS+ZabAn/WzOFTApgB4y16Az</InverseQ>
<D>OjnoUo+E02CcU3TBcDFnmlrJ2ORUcXCy5FB</D>
</RSAKeyValue>
(當然,其中的一個就是假的,不要試圖使用它或將拋出錯誤)
正如dajames所說,你還必須擁有D,DP,DQ和InverseQ。如果你沒有他們,事情會變得更加複雜但不是不可能的,因爲你必須自己計算它們。最簡單的方法(對我來說)是訪問爲我構建P和Q號碼的工具的源代碼。在裏面,有些課程可以用這種大數字來操作。通過稍微修改了代碼,我可以計算出:
DP = (1/Exponent) mod (P - 1)
DQ = (1/Exponent) mod (Q - 1)
InverseQ = (1/Q) mod P where P > Q
見最後一行,則必須考慮到的是,標準要求P>Q
,或鍵將被拒絕。但是,我用Delphi(TPLockBox 2.0)使用的工具並不關心它。
注意到上面的XML十六進制數是大端,看着你的P和Q鍵,看到你可以遇到麻煩因爲D9<E2
,所以P<Q
!!在任何計算解決之前交換你的P和Q號碼,如果我是對的(我絕對不確定這一點,有人可以證實嗎?Thnx)
最後,將所有數字轉換爲base64並構建上述XML結構體。
第2步
隨着BouncyCastle,這是更容易。
下載BouncyCastle.dll,複製到您的項目文件夾(或任何地方),並將其引用添加到您的VB項目;現在你將有一個新的「組織」的命名空間,你可以編碼:
Dim r As New RSACryptoServiceProvider()
' NOTE: substitute next string with above-like XML,
' or load it from a file or what you prefer:
r.FromXmlString("<RSAKeyValue><Modulus>vbBYUkGHX4YI1Rcovx+Ewz2OW........</RSAKeyValue>")
Dim key As Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair = Org.BouncyCastle.Security.DotNetUtilities.GetRsaKeyPair(r)
' Export to a PEM file:
Dim fOut As New IO.StreamWriter("c:\keys.pem", False)
Dim pw As New Org.BouncyCastle.OpenSsl.PemWriter(fOut)
pw.WriteObject(key)
希望它可以幫助像我所有的菜鳥誰大汗淋漓,像我一樣在尋找整個過程。
如果你能爲我提供一些例子,我將非常感激!非常感謝您的好意。 – Kerby82 2010-10-15 18:24:10