c#RSACryptoServiceProvider中的指数和模数是啥数据?

Posted

技术标签:

【中文标题】c#RSACryptoServiceProvider中的指数和模数是啥数据?【英文标题】:What kind of data are exponent and modulus in c# RSACryptoServiceProvider?c#RSACryptoServiceProvider中的指数和模数是什么数据? 【发布时间】:2016-09-27 14:22:08 【问题描述】:

我有在 c# 中使用 RSACryptoServiceProvider 生成的公钥:

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

这些参数是在一个初始化为 512 位的 RSA 变量中生成的

new RSACryptoServiceProvider(512)    

现在,我需要使用这些(模数和指数)来加密一些数据,但要使用 groovy(SoapUI 测试中的 groovyscript)。 在 groovy 中,我正在测试 RSA 加密,并且对于它的公钥,它只获得十进制数的模数和指数。上面的 Modulus 看起来像一个 base64 字符串,但是当我尝试在 groovy 中解码时,它会得到一些特殊字符,我使用的代码是

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

我最终需要的是知道如何使用在 c# 中获得的模数和指数来加密 groovy 中的一些数据。 一些帮助如何做到这一点?

【问题讨论】:

【参考方案1】:

在此处的 XML 表示中,数字是 Base64 编码的 Big Endian 字节数组表示的数字。对它们来说最合理的字符串格式(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

【讨论】:

您使用哪种方法将该 base64 字符串转换为最终十进制?我明白你在说什么,但我无法达到相同的结果@bartonjs @JuanFranciscoCaballero 我使用 tomeko.net/online_tools/base64.php?lang=en 表示 Base64->Hex 和 mobilefish.com/services/big_number/big_number.php 表示 Hex->BigInteger。注意不要将每个字节转换为整数,因为这不是准确的转换。【参考方案2】:

Modulusbyte[]

有关详细信息,请参阅RSAParameters structure。

【讨论】:

以上是关于c#RSACryptoServiceProvider中的指数和模数是啥数据?的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ floor 函数

C语言数组问题?

关于c++/c

C语言 extern “C”

使用 MetroWerks C/C++ 开发的 C/C++ 资源

Lua与C/C++交互——C/C++调用Lua脚本