use*_*509 2 c# cryptographicexception rsa private-key
我们有一个C#/ .Net 4.0应用程序,它从WebService中收到的Base64中的String中导入RSA私钥.
此应用程序适用于1024位的RSA密钥,但不使用特殊类型的rsa私钥(大约1%的密钥).
这是字节长度:
工作密钥:
不工作的密钥:
不同之处在于D的长度(128个工作,127个不工作).非工作密钥比工作密钥短1个字节.
参数已设置但在执行RSA.ImportParameters(rsaParams)时会抛出带有"错误数据"消息的CryptographicException.
应该包括什么来解决这个问题?
RSACryptoServiceProvider
对数据长度有一些假设:
n
<= 4
字节;虽然RSACng允许"任意大小"),让我们调用长度e
n
n/2
n/2
n/2
n/2
n/2
因此,假设您的第二个键实际上是模数:128个字节(因为64字节P乘以64字节Q不是256个字节数),您只需要将D数组左键填充为0即可它达到了合适的长度.
byte[] newD = new byte[modulus.Length];
Buffer.BlockCopy(d, 0, newD, newD.Length - d.Length, d.Length);
Run Code Online (Sandbox Code Playgroud)
.NET Core有可用的源代码显示该关系.在.NET Framework中,它隐藏在CLR中,因此在referencesource上不可用.