Это образец для RSA в проекте VB.NET.
ШАГ 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>
(Конечно, это одна подделка, не правда попробовать использовать его или выбросит ошибка)
Как сказал Даджем, у вас также должны быть 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, см., Что вы можете столкнуться с проблемами, потому что , поэтому 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