【问题标题】:RSACryptoServiceProvider.SignHash with SHA256 returns 128 bytes instead of 32?带有 SHA256 的 RSACryptoServiceProvider.SignHash 返回 128 字节而不是 32?
【发布时间】:2017-08-28 21:20:32
【问题描述】:

我是密码学的新手,所以我可能对这里应该发生的事情感到困惑。我从一个 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;
    }

【问题讨论】:

    标签: c# .net cryptography


    【解决方案1】:

    我期待 32 岁。

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

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

    【讨论】:

    • 谢谢,这很有意义。
    • 确切地说,签名的大小与模数完全相同,以字节为单位,无论填充如何(可能除了教科书 RSA,其输出是一个小于模数的数字,而不是八位字节细绳)。根据定义,模数与 RSA 的密钥大小相同。
    • 如果您可以选择,请使用 RSA-2048 或更高版本。各行各业已不再使用 1024 位密钥。
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2014-01-21
    • 2013-08-28
    • 2014-09-26
    • 2021-09-20
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多