15 октября 2010 г.

OpenSSL и RSACryptoServiceProvider ключи pem и XML

Если вы сгенерировали ключи (открытый и закрытый) для RSA при помощи утилиты OpenSSL, то вы получите .pem файл в котором будет ключ в Base64 кодировке. Для конвертирования данного ключа в формат XML
<RSAKeyValue>
  <Modulus>...</Modulus>
  <Exponent>...</Exponent>
  <P>...</P>
  <Q>...</Q>
  <DP>...</DP>
  <DQ>...</DQ>
  <InverseQ>...</InverseQ>
  <D>...</D>
</RSAKeyValue>
Воспользуйтесь функцией OpenSSL
openssl rsa -in key.pem -text -noout
Там вы увидите составляющие:
modulus
publicExponent
publicExponent
prime1
prime2
exponent1
exponent2
coefficient
Теперь соответствие с RSAKeyValue:
modulus = <Modulus> (256 байт) первые 2 байта 00 игнорировать
publicExponent = <Exponent> AQAB
privateExponent = <D> (256 байт) первые 2 байта 00 игнорировать
prime1 = <P> (128 байт) первые 2 байта 00 игнорировать
prime2 = <Q> (128 байт) первые 2 байта 00 игнорировать
exponent1 = <DP> (128 байт) первые 2 байта 00 игнорировать
exponent2 = <DQ> (128 байт)
coefficient = <InverseQ> (128 байт)
Количество байт указано для ключа длинной 1024 байт. Сконвертируйте, полученный массив байтов для каждого составляющего компонента, в Base64 и внесите в соответствующий узел XML. Полученный ключ можно использовать в коде:
Dim rsa As System.Security.Cryptography.RSACryptoServiceProvider
Dim fileContents As String

fileContents = My.Computer.FileSystem.ReadAllText("c:\private_key.xml")
rsa.FromXmlString(fileContents)