小编nr-*_*-91的帖子

数字签名:加密哈希与签署哈希?

我正在尝试实现SHA256-RSA数字签名,我对C#中的术语和实现感到困惑.

AFAIK,"签名文件"是生成文件的哈希值,然后加密该哈希值.我也听过"签署哈希"这个短语.这是一回事吗?或者这是哈希哈希然后加密哈希'?

这是有问题的代码:

public void SignatureTest(byte[] data, X509Certificate2 cert)
{
    var sha256 = new SHA256CryptoServiceProvider();
    var rsa = (RSACryptoServiceProvider)cert.PrivateKey;

    var hashOfData = sha256.ComputeHash(data);

    var encryptedHash = rsa.Encrypt(hashOfData, false);
    var encryptedHashOAEP = rsa.Encrypt(hashOfData, true);            
    var signedHash = rsa.SignHash(hashOfData, "SHA256");

    //Shouldn't one of these be true?
    var false1 = CompareAsBase64Str(encryptedHash, signedHash);
    var false2 = CompareAsBase64Str(encryptedHashOAEP, signedHash);

    //This is the one that actually matches
    var true1 = CompareAsBase64Str(signedHash, rsa.SignData(data, sha256));
}

public bool CompareAsBase64Str(byte[] b1, byte[] b2)
{
    return (Convert.ToBase64String(b1) == Convert.ToBase64String(b2));
} …
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptography certificate

7
推荐指数
2
解决办法
4235
查看次数

标签 统计

c# ×1

certificate ×1

cryptography ×1

encryption ×1