Какие данные являются экспонентой и модулем в с # RSACryptoServiceProvider?

У меня есть открытый ключ, созданный на С # с помощью RSACryptoServiceProvider:

<RSAKeyValue>
   <Modulus>
      4kKhD/FWAMtQTRifArfXjxZN+6bOXTkHrVpyz/1wODhSOBqDewoSOFAp5boBd3wFjXszHA+gpUxZNWHRTj898Q==
   </Modulus>
   <Exponent>
      AQAB
   </Exponent>
<RSAKeyValue>

Эти параметры генерируются в переменной RSA, инициализированной на 512 битах.

new RSACryptoServiceProvider(512)    

Теперь мне нужно использовать их (модуль и показатель степени) для шифрования некоторых данных, но в отличном виде (Groovyscript в тесте SoapUI). В Groovy я тестировал шифрование RSA, и для его открытого ключа он получает модуль и показатель степени только с десятичным числом. Модуль выше выглядит как строка base64, но когда я попытался декодировать в Groovy, он получил некоторые специальные символы, код, который я использую для этого,

byte[] decoded = encoded.decodeBase64()
string s == new String(decoded)

наконец, мне нужно знать, как использовать модуль и показатель степени, полученные в C #, для шифрования некоторых данных в Groovy. Некоторая помощь в том, как это сделать?


person Juan Francisco Caballero    schedule 27.09.2016    source источник


Ответы (2)


В представлении XML здесь числа представляют собой представления чисел в виде массива байтов Big Endian в кодировке Base64. Наиболее разумным строковым форматом для них (кроме Base64) является шестнадцатеричный, поскольку он выравнивается по границам байтов; и у вас может быть программа декодирования Hex to BigInt.

Экспонента

Base64: AQAB
Hexadecimal: 01 00 01
Decimal: 65537

Модуль

Base64:
    4kKhD/FWAMtQTRifArfXjxZN+6bOXTkHrVpyz/1wODhSOBqDewoSOFAp5boBd3wFjXszHA+gpUxZNWHRTj898Q==
Hexadecimal: 
    E2 42 A1 0F F1 56 00 CB 50 4D 18 9F 02 B7 D7 8F
    16 4D FB A6 CE 5D 39 07 AD 5A 72 CF FD 70 38 38
    52 38 1A 83 7B 0A 12 38 50 29 E5 BA 01 77 7C 05
    8D 7B 33 1C 0F A0 A5 4C 59 35 61 D1 4E 3F 3D F1
Decimal:
     11 850 211 890 167 428 942 656 005 762 527 792
    664 504 148 414 649 299 622 730 495 954 496 884
    582 668 295 994 906 881 962 852 147 063 424 895
    822 707 299 811 616 971 053 013 246 862 591 780
    599 074 078 193
person bartonjs    schedule 27.09.2016
comment
какой метод вы использовали для преобразования этой строки base64 в окончательное десятичное число? Я понимаю, что вы сказали, но не могу достичь того же результата @bartonjs - person Juan Francisco Caballero; 27.09.2016
comment
@JuanFranciscoCaballero Я использовал tomeko.net/online_tools/base64.php?lang=en для Base64- ›Hex и mobilefish.com/services/big_number/big_number.php для Hex- ›BigInteger. Будьте осторожны, чтобы не преобразовывать каждый байт в целое число, поскольку это не точное преобразование. - person bartonjs; 27.09.2016

Modulus is a byte[].

См. структуру RSAParameters для более подробной информации.

person toadflakz    schedule 27.09.2016