我需要验证由 JAVA 签名 API 生成的 C++ 中的签名。我有一组相同的公钥和私钥。我还验证了签名和验证在 c++ 中有效。但是我在验证 JAVA 生成的签名时遇到问题。我查看了文档并尝试了不同的方法,但我似乎仍然无法弄清楚。我正在用用于验证的原始 JAVA 代码粘贴等效的 C++ 代码。
原始JAVA代码:
public static boolean verify(byte[] data, byte[] _signature, byte[] _publicKey) throws GeneralSecurityException {
Signature signatureInstance = Signature.getInstance("DSA", "SUN");
signatureInstance.initVerify(getPublicKey(_publicKey));
signatureInstance.update(data);
return signatureInstance.verify(_signature);
}
C++代码:
//sign_buffer contains the binary signature.
int ret = DSA_verify(NID_dsa, data, sizeof(data), sign_buffer,
sign_length, pubkey);
if (ret != 1) {
cerr << "verify failed" << endl;
exit(-1);
}
我有3个问题:
这是验证签名的正确方法吗?
在验证数据之前是否需要散列数据?如果是,那么在签名之前JAVA是如何做的?
噜噜哒
相关分类