DSA签名c#
我有证书 这是我必须验证的文本: B5080F731EE89EC82FD2E8B22E9无法显示“真实”文本 这是签署的: MiibuwyjkozihvcnacaqexczajbgurdgGuardgGuamasgsgsib3dqhattc8wggebagebmg8wzdelmakga1ebhmcruxhdaabgqnvg1tb21dw5dhkxezarbgnvbgxxxvmxfqdqwgqdqwqdqwqdqdqwqwqdqwqwqwqwqwqwqwqwqwkkkkkkkkwkkkkkkkkkkkkkkkkkkkkkkwkkkkkkjbgqwkkkkkkkkjjjjjjjjjjkkkkkkkkkkkkwzzzzzzzzyyyyzzzzzyyyYEFDGPP0877PKACHYIGVW5SPED0W03MAKGBYQGSM44BAMEMDAUAHUA4PH8DBPHHTUPHVHJXJEI%2BFrJYUCFQCnZ6IABDiRlctS9E9N3IQK60JLIg%3D%3D 找不到用c#验证签名的方法。当我使用“normal”DSA签名c#,c#,dsa,C#,Dsa,我有证书 这是我必须验证的文本: B5080F731EE89EC82FD2E8B22E9无法显示“真实”文本 这是签署的: MiibuwyjkozihvcnacaqexczajbgurdgGuardgGuamasgsgsib3dqhattc8wggebagebmg8wzdelmakga1ebhmcruxhdaabgqnvg1tb21dw5dhkxezarbgnvbgxxxvmxfqdqwgqdqwqdqwqdqdqwqwqdqwqwqwqwqwqwqwqwqwkkkkkkkkwkkkkkkkkk
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);
你的数据本身不是一个签名。它是一个查询字符串编码的base64编码的CMS签名数据的表示形式,带有分离的内容,并且它碰巧是用DSA签名的
str = Uri.UnescapeDataString(str);
byte[] signatureMessage = Convert.FromBase64String(str);
ContentInfo content = new ContentInfo(yourDataHere);
SignedCms signedCms = new SignedCms(content, detached: true);
signedCms.Decode(signatureMessage);
SignerInfoCollection signers = signedCms.SignerInfos;
if (signers.Count != 1 || signers[0].Certificate != null)
{
// Reject it, this isn't what you're looking for.
// At least, based on the sample you gave.
//
// You could, for Count == 1, accept Certificate == null or
// Certificate.RawData.SequenceEqual(CurrentCer.RawData),
// if you're so inclined.
}
// This throws if the signature doesn't check out.
signedCms.CheckSignature(new X509Certificate2Collection(CurrentCer), verifySignatureOnly: true);
我已经看过你的帖子好几次了,不知道你在问什么。你有证书。可以你找不到一个方法来做这个。这是什么?为什么你在一句话中说签名应该只有40个字节,而在其他地方你说你知道签名是500个字节?嗨,艾米。这是为了验证签名。我在证书中有公钥,要验证的签名和要验证的文本当我使用“普通”DSACryptoServiceProvider时,我总是会收到一个错误,说签名大小应该是40字节。我收到一个500字节的签名Hi bartonjs,我得到一个异常“哈希值不正确”。这是否意味着签名未经验证?@Henrique正确。输入字节、输入(或存储)证书和现有签名的组合不在一起,如果您的输入是文本,请确保它不是Unix vs Windows beeline重新解释。