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 - 错误:错误数据的主要内容,如果未能解决你的问题,请参考以下文章

C#进阶C# 泛型

C#进阶C# 匿名方法

C#进阶C# 多线程

C# 教程

[C#教程01]C# 简介

用 C# 编写 C# 编译器,先有鸡还是先有蛋?