【发布时间】:2018-06-29 04:29:32
【问题描述】:
Certificate我有证书
这是我必须验证的文字:
B5080F731EE89EC82FD2E8B22E9_I_CANNOT_SHOW_THE_REAL_TEXT
这是签名:
MIIBUwYJKoZIhvcNAQcCoIIBRDCCAUACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGCAR8wggEbAgEBMG8wZDELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1NBUCBUcnVzdCBDb21tdW5pdHkxEzARBgNVBAsTClNBUCBXZWIgQVMxFDASBgNVBAsTC0kwMDIwMjEyMzYwMQwwCgYDVQQDEwNFMTUCByASBQYIEQgwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE4MDYyNzE5MzcyNVowIwYJKoZIhvcNAQkEMRYEFDgpp0877pKaChyIGVw5sPeD0W03MAkGByqGSM44BAMEMDAuAhUA4PH8bdBPHHtuPHvhJxjei%2BFrJYUCFQCnZ6IABDiRlctS9E9N3IQK60JLIg%3D%3D
找不到使用 c# 验证签名的方法。当我使用“正常”DSACryptoServiceProvider 时,我总是收到错误消息,说签名大小应该是 40 字节。
我只需要知道要去。使用方法 我知道是DSA。 我知道签名大约是 500 字节
这是我正在尝试的代码:
DSACryptoServiceProvider csp = (DSACryptoServiceProvider)CurrentCer.csp.PublicKey.Key;
SHA1Managed sha1 = new SHA1Managed();
byte[] data = Encoding.UTF8.GetBytes(ToSign);
byte[] hash = sha1.ComputeHash(data);
var base64EncodedBytes = System.Convert.FromBase64String(signature);
result = csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), base64EncodedBytes);
DSASignatureDeformatter verifier = new DSASignatureDeformatter(csp);
verifier.SetHashAlgorithm("SHA1");
bool valid = verifier.VerifySignature(hash, base64EncodedBytes);
【问题讨论】:
-
我已经读过你的帖子好几遍了,不知道你在问什么。你有证书。好的。你找不到方法来做“这个”。 这个是什么?
-
为什么你一句话说签名应该只有40个字节,而别处你说你知道签名是500个字节?
-
嗨,艾米。这是验证签名。我在证书中有公钥、要验证的签名和要验证的文本
-
当我使用“正常”的 DSACryptoServiceProvider 时,我总是收到错误消息,说签名大小应该是 40 字节。我收到一个 500 字节的签名