Ceci est un exemple pour RSA dans un projet VB.NET.
ÉTAPE 1
D'abord, vous devez formater votre N, E, P, Q, DP, DQ, InverseQ, D données clés (tous !! Voir plus loin) en base64 et de construire avec eux une chaîne structurée XML (ou fichier) comme ceci:
<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>
(Bien sûr, ce un est faux, ne pas essayer de l'utiliser ou jetteront erreur)
Comme les dames l'ont dit, vous devez également avoir D, DP, DQ et InverseQ. Si vous n'en avez pas, les choses deviennent plus compliquées mais pas impossibles, car vous devez les calculer vous-même. Le moyen le plus simple (pour moi) était d'accéder au code source de l'outil qui construit les numéros P et Q pour moi. A l'intérieur, il y avait des classes pour fonctionner avec ce genre de grands nombres. En modifiant légèrement le code, je pourrais calculer:
DP = (1/Exponent) mod (P - 1)
DQ = (1/Exponent) mod (Q - 1)
InverseQ = (1/Q) mod P where P > Q
Voir la dernière ligne, vous devez tenir compte du fait que les normes exigent que P>Q
ou seront rejetées la clé. Cependant, l'outil que j'ai utilisé avec Delphi (TPLockBox 2.0) ne s'en souciait pas. En notant que les nombres hexadécimaux au-dessus de XML sont big endian, et en regardant vos touches P et Q, voyez que vous pouvez rencontrer des problèmes car D9<E2
, donc P<Q
!! Échanger vos numéros P et Q avant que tout calcul ne résout, si j'ai raison (je ne suis absolument pas sûr de ce point, quelqu'un pourrait-il confirmer?)
Enfin, convertir tous les nombres en base64 et construire le XML ci-dessus structure.
ÉTAPE 2
Avec BouncyCastle, cela est plus facile. Téléchargez BouncyCastle.dll, copiez-le dans votre dossier de projet (ou ailleurs) et ajoutez-y une référence dans votre projet VB; maintenant, vous aurez un nouvel espace de noms « org » et vous pouvez le code:
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)
espère que cela aide à tous les noobs comme moi qui suintaient comme je l'ai fait tout en regardant la procédure.
Si vous pouvez me donner un exemple, j'apprécierais beaucoup! Merci beaucoup pour votre gentillesse. – Kerby82