对密码学知之甚少,我对看似简单的任务有很大的问题。
我有 .pem 证书、数据字节和该数据的签名。我想通过将数据与签名进行匹配来检查是否有人更改了数据。
我的尝试:
private bool VerifySignature(byte[] data, byte[] signature)
{
try
{
X509Certificate certificate = new X509Certificate("cert_filename.pem");
if (certificate == null)
return false;
DSACryptoServiceProvider dsa = (DSACryptoServiceProvider)certificate.PublicKey.Key;
return dsa.VerifyData(data, signatureData);
}
catch
{
return false;
}
}
但这给了我一个错误
'不支持证书密钥算法' (System.NotSupportedException)。
查看加载的证书,它说签名算法是“sha1ecdsa”。
我只是想根据签名验证数据。我在这里想念什么?我想在没有任何外部解决方案的情况下做到这一点,因为这似乎是一项微不足道的任务。
更新:我正在尝试实现与以下 Java 代码相同的功能:
private boolean verify(byte[] data, byte[] signature)
{
boolean isLicenseCorrect = false;
Signature sig = Signature.getInstance("SHA1WithECDSA");
sig.initVerify(certificate.getPublicKey());
sig.update(data);
return sig.verify(signature);
}