【问题标题】:C# - RSACryptoServiceProvider - Error: Bad DataC# - RSACryptoServiceProvider - 错误:错误数据
【发布时间】: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);

当我运行它时,我得到这个错误:

谁能告诉我我做错了什么?

【问题讨论】:

    标签: c# rsa rsacryptoserviceprovider


    【解决方案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--;
            }
        }
    

    【讨论】:

    • 感谢您的回答。不幸的是,这不是解决方案。仍然抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多