我已经获得了 RSA 参数的 M、Exponent 和 D 组件,并且一直在尝试在 C#.NET 中使用它来加密数据。我想知道作为公钥的一部分,这些组件中的哪些是加密数据所必需的?此外,以 16 为底的指数为 10001。我应该在 C# 中设置什么 RsaParameters.Exponent 参数?我不知道我应该如何准确地解释该数字并将其放在 Exponent 中,这是一个字节数组。组件不需要以 16 为基数的长度均匀吗?
谢谢。
RSAParameters rsaKeyInfo = new RSAParameters
{
Exponent = new byte[] {1, 0, 1},
...
};
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaKeyInfo);
rsa.Decrypt(...)
}
这是一个代码示例
因此,您应该将指数设置为数字 65537 的字节表示(以 16 为基数的 10001)。我不太确定它是如何工作的RSACryptoServiceProvider
,但如果您使用的是 OpenSSL,这BitConverter.GetBytes(65537)
是一个坏主意,因为它是{1, 0, 1, 0}
,但不是{1, 0, 1}
,它不能正常工作。因此,我认为最好以 MSDN 示例中所写的方式保留它:
byte[] Exponent = {1,0,1};