这是一个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