C# - RSACryptoServiceProvider - 错误:错误数据
Posted
技术标签:
【中文标题】C# - RSACryptoServiceProvider - 错误:错误数据【英文标题】:C# - RSACryptoServiceProvider - Error: Bad Data 【发布时间】:2015-10-21 08:31:31 【问题描述】:我正在尝试使用 C# 运行 RSA 解密。
我的代码:
byte[] n = BigInteger.Parse("3104649130901425335933838103517383").ToByteArray();
byte[] p = BigInteger.Parse("49662237675630289").ToByteArray();
byte[] q = BigInteger.Parse("62515288803124247").ToByteArray();
byte[] e = BigInteger.Parse("65537").ToByteArray();
byte[] d = BigInteger.Parse("1427000713644866747260499795119265").ToByteArray();
byte[] dp = BigInteger.Parse("15085765714732865").ToByteArray();
byte[] dq = BigInteger.Parse("1326865232237451").ToByteArray();
byte[] iq = BigInteger.Parse("5777070651124236").ToByteArray();
RSAParameters rsaparams = new RSAParameters();
rsaparams.P = p;
rsaparams.Q = q;
rsaparams.Modulus = n;
rsaparams.Exponent = e;
rsaparams.D = d;
rsaparams.DP = dp;
rsaparams.DQ = dq;
rsaparams.InverseQ = iq;
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.ImportParameters(rsaparams);
当我运行它时,我得到这个错误:
谁能告诉我我做错了什么?
【问题讨论】:
【参考方案1】:显然RSAParameters
期望其组件 byte[] 数组采用大端格式。因此,您必须反转从BigInteger.ToByteArray()
获得的每个字节数组中的字节。一个就地反向方法的示例是:
public static void reverse (ref byte[] x)
int i = 0;
int j = x.Length - 1;
while (i < j)
byte t = x [i];
x [i] = x [j];
x [j] = t;
i++;
j--;
【讨论】:
感谢您的回答。不幸的是,这不是解决方案。仍然抛出异常。以上是关于C# - RSACryptoServiceProvider - 错误:错误数据的主要内容,如果未能解决你的问题,请参考以下文章