【发布时间】:2018-10-10 21:27:48
【问题描述】:
我需要验证由 JAVA 签名 API 生成的 c++ 中的签名。 我有相同的一组公钥和私钥。 我还验证了签名和验证在 c++ 中有效。但我无法验证 JAVA 生成的签名。 我查看了文档并尝试了不同的方法,但我似乎仍然无法弄清楚。我正在粘贴等效的 c++ 代码和用于验证的原始 JAVA 代码。
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在签名之前是怎么做的?
【问题讨论】:
标签: java c++ encryption openssl