c# - SHA256 的 RSACryptoServiceProvider.SignHash 返回 128 字节而不是 32?

标签 c# .net cryptography

我是密码学新手,所以也许我对这里应该发生的事情感到困惑。我从 32 字节消息摘要开始,并尝试使用我的私钥对其进行签名。 RSA.SignHash 的输出是 128 字节。我预计 32。

    static private byte[] RSAHashAndSignData(byte[] data, RSAParameters privateKey)
    {
        byte[] signedHash;
        //Create a new instance of RSACryptoServiceProvider.
        using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
        {
            //Import the public key 
            RSA.ImportParameters(privateKey);

            //Encrypt the passed byte array
            var sha = SHA256Managed.Create();
            var digest = sha.ComputeHash(data);
            signedHash = RSA.SignHash(digest, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
        }

        return signedHash;
    }

最佳答案

I am expecting 32.

这是一个错误的假设。签名不会产生等于输入大小的大小。

使用 PKCS#1 填充,使用 1024 位 RSA key 将生成 128 字节签名。签名的大小与签名 key 的模数的大小有关。

关于c# - SHA256 的 RSACryptoServiceProvider.SignHash 返回 128 字节而不是 32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45927543/

相关文章:

JavaScript WebCrypto importKey 错误 : AES key data must be 128 or 256 bits

c# - 如果我的软件使用它,我是否必须在每个客户端上安装它?

c# - 名称为 account 的代理类型已由另一个程序集定义

encryption - CTR 模式下的 AES 256

.net - GData OAuthUtil.GetAccessToken不返回refresh_token值

c# - VS 2017 ASP.NET Core 测试项目 - Microsoft.AspNetCore.Identity 缺失

c++ - 在 openssl 中为 pkcs7 选择摘要和加密算法

c# - MVC5 ViewModel 不回发到 Controller

c# - Linq GroupBy/字典的聚合,其键是元组

c# - 如何访问字典中唯一的 KeyValuePair?