使用公钥或非常的RSA解码

时间:2018-05-08 08:32:36

标签: c# rsa

我有以下问题:

我的应用程序收到带有公钥,RSA编码(带私钥)sha256签名和一堆数据的证书。

我必须检查数据的sha256哈希是否与RSA编码的哈希相同。 它看起来像:

bool checkSHA(X509Certificate2 certificate, byte[] RsaSHASign, byte[] dataToCheck)
{
    byte[] publicKey = certificate.GetPublicKey();


    RSACryptoServiceProvider crsa = new RSACryptoServiceProvider();

    //Get an instance of RSAParameters from ExportParameters function.
    RSAParameters RSAKeyInfo = crsa.ExportParameters(true);

    //Set RSAKeyInfo to the public key values.
    RSAKeyInfo.Modulus = publicKey;
    //Import key parameters into RSA.
    crsa.ImportParameters(RSAKeyInfo);   

    SHA256 sha = SHA256.Create();
    byte[] hashValue1 = sha.ComputeHash(dataToCheck);

    string OID = CryptoConfig.MapNameToOID("SHA256");

    //here I must check if the counted hash is the same as the one passed as RSA encoded
    return crsa.VerifyData(RsaSHASign, OID, hashValue1);
}

我真正需要的是在 Rsa编码之前的哈希值,但我想如果没有私钥就不可能。

不幸的是,即使我知道散列是相同的(在RSA之前),VerifyData总是返回false。我真的被卡住了:(

我希望解决方案并不困难,但不知何故无法弄明白。 我尝试使用BouncyCastle和openssl包装但是没有成功

1 个答案:

答案 0 :(得分:0)

我用这种方式:

X509Certificate2 Pe = new X509Certificate2(Pe_file);
RSACryptoServiceProvider rsa_e = (RSACryptoServiceProvider)Pe.PublicKey.Key;
if (rsa_e.VerifyHash(hash, "SHA256", data))
{
    Debug.Print("OK");
}

hash是已验证数据的SHA256哈希值。 data是验证的签名。