【问题标题】:RSA decrypt incorrect parameterRSA解密参数不正确
【发布时间】:2014-03-15 03:34:40
【问题描述】:

对于我们的程序,我们做了一些预处理来验证一些数据文件的完整性。为此,我们计算使用私钥加密的哈希值,并在运行时使用公钥解密哈希值,并根据数据文件的哈希值进行检查。

我们创建了一个自动生成新密钥对的预编译器。公钥被放在某个地方的 .cs 文件中,并将被程序使用。私钥信息存储在一个临时文件中,供以后计算哈希并加密它的程序使用。

这是生成密钥对并存储它的代码。

// make keys
var rsa = new RSACryptoServiceProvider(384);
var key = rsa.ExportParameters(true);

// store public key in generated cs file
File.WriteAllText(Program.keyFileName, string.Format(Program.keyFileTemplate, Convert.ToBase64String(key.Exponent), Convert.ToBase64String(key.Modulus)));

// store private key in temporary file
File.WriteAllText("private-key.temp", rsa.ToXmlString(true));

在此之后,实际的程序被编译,我们运行一个后编译器。 RSA参数再次导入如下:

// read private key
string keyXml = File.ReadAllText("private-key.temp");
File.Delete("private-key.temp");

var rsa = new RSACryptoServiceProvider(384);
rsa.FromXmlString(keyXml);

然后我们处理数据文件并计算一个哈希值,然后将其保存到一个名为hashBytes 的变量中(一个字节数组)。因为我想使用私钥对,所以我现在使用 RSA 解密这个字符串(因为加密会使用公钥对,这不是我们想要的),之前创建的实例如下:

    var toEncrypt = new byte[rsa.KeySize / 8];
    hashBytes.CopyTo(toEncrypt, 0);

    try
    {
        rsa.Decrypt(toEncrypt, false);
    }
    catch (CryptographicException e)
    {
        Console.WriteLine("whoops: " + e.Message);
    }

但是,这会导致 CryptographicException “参数不正确”。环顾四周后,我什至没有找到这个错误的确切含义,但我认为 RSA 参数有问题,这令人惊讶,因为我认为使用 XML 字符串就可以了。

我做错了什么?

编辑: 我已经删除了固定密钥大小,现在直接加密 hashBytes。似乎我理解错了,密钥和明文不必是相同的大小。但是,我现在得到一个“错误数据”。异常而不是不正确的参数一。不过,加密不会产生任何错误。

【问题讨论】:

  • 您使用的密钥长度(384 位)太小了,您不妨只存储未受保护的明文哈希。
  • 是的,我也想通了。我似乎误解了一个来源,所以我认为密钥长度和明文大小必须相等。现在我让 CryptoServiceProvider 自己确定一个密钥长度,这样就解决了。无论如何,感谢您指出:)

标签: c# encryption hash cryptography rsa


【解决方案1】:

我已经通过使用我不知道的RSACryptoProvider 提供的Sign 方法解决了这个问题。最后一个代码块变成了下面这样:

try
{
    var hashBytes = rsa.SignData(stream, new SHA256CryptoServiceProvider());

    File.WriteAllBytes(Program.modPath + "default.rf-modsignature", hashBytes);
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    throw;
}

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 2022-01-05
    • 2010-11-23
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多