2016-09-27 5 views
2

J'ai la clé publique générée en C# avec RSACryptoServiceProvider:Quels types de données exposent et modulent dans C# RSACryptoServiceProvider?

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

Ces paramètres sont générés dans une variable RSA initialisé sur 512 bits

new RSACryptoServiceProvider(512)  

Maintenant, je dois les utiliser (module et exposant) pour crypter certaines données, mais dans groovy (groovyscript dans un test SoapUI). Dans groovy, je testais le cryptage RSA, et pour sa clé publique, il obtient le module et l'exposant avec seulement un nombre décimal. Les Modulus ci-dessus ressemble une chaîne base64, mais quand j'ai essayé de décoder en Groovy, il obtient des caractères spéciaux, le code que j'utilise pour cela est

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

ce que je dois enfin est de savoir comment utiliser le module et exposant obtenu en C# pour crypter certaines données dans groovy. Un peu d'aide pour faire cela?

Répondre

3

Dans la représentation XML ici, les nombres sont des représentations de nombres Big Endian codées en base64. Le format de chaîne le plus sensé pour eux (autre que Base64) est hexadécimal, puisque cela s'aligne aux limites d'octets; et vous pourriez avoir une routine de décodage Hex à BigInt.

Exponent

Base64: AQAB 
Hexadecimal: 01 00 01 
Decimal: 65537 

Modulus

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 
+1

quelle méthode avez-vous utilisé pour convertir cette chaîne base64 en décimal finale? Je comprends ce que vous avez dit mais je ne peux pas atteindre le même résultat @bartonjs –

+1

@JuanFranciscoCaballero J'ai utilisé http://tomeko.net/online_tools/base64.php?lang=fr pour Base64-> Hex et http: // www. mobilefish.com/services/big_number/big_number.php pour Hex-> BigInteger. Veillez à ne pas convertir chaque octet en nombre entier, car ce n'est pas une conversion précise. – bartonjs