我们有一个C#/ .Net 4.0应用程序,它从WebService中收到的Base64中的字符串中导入RSA私钥。
此应用程序适用于1024位的RSA-Keys,但不使用特殊类型的rsa私钥(大约1%的密钥)。
以下是字节长度:
工作密钥:
不-工作密钥:
差异在于D的长度(128个工作,127个不工作)。非工作密钥比工作密钥短1个字节。
参数已设置但在执行RSA.ImportParameters(rsaParams)时会抛出带有“错误数据”消息的CryptographicException。
解决这个问题应包括哪些内容?
答案 0 :(得分:7)
RSACryptoServiceProvider
对数据长度有一些假设:
n
<= 4
字节;虽然RSACng允许“任意大小”),但我们调用长度e
n
n/2
n/2
n/2
n/2
n/2
因此,假设您的第二个键实际上是Modulus:128个字节(因为64字节的P乘以64字节的Q不是256个字节的数字),您只需要使用左侧填充D数组零,以使其达到适当的长度。
byte[] newD = new byte[modulus.Length];
Buffer.BlockCopy(d, 0, newD, newD.Length - d.Length, d.Length);
.NET Core有source code available显示该关系。在.NET Framework中,它隐藏在CLR中,因此在referencesource上不可用。