我使用 OpenSSL(在 C++ 中)对文本进行签名,但是我的 Java 程序并不总是验证签名的消息(只有约 5 个得到验证)。有趣的是https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html没有验证它们中的任何一个:
曲线名称:secp256k1 签名算法:SHA256withECDSA
私钥
431313701ec60d303fa7d027d5f1579eaa57f0e870b23e3a25876e61bed2caa3
公钥
035bcefc4a6ca257e394e82c20027db2af368474afb8917273713644f11a7cecb3
失败:
text to sign=
pcax2727gRo8M6vf9Vjhr1JDrQ3rdPYu6xx81000pcax273z8kaV5Ugsiqz3tvWGo8Gg6sch6V4912341535867163229
signature=
3044022061dff8e39f9324b0794ec2c58abda971898f694ca980baf3c2a4045a9048b441022054a2fb8ef3d383fd7eeb31425dba440e2fd2053778d4ab3725046385c7845cff0000
成功:
text to sign=
pcax2727gRo8M6vf9Vjhr1JDrQ3rdPYu6xx81000pcax273z8kaV5Ugsiqz3tvWGo8Gg6sch6V4912341535867122614
signature=
3046022100f200d0fb9e86a16bd46ee2dd11f1840a436d0a5c6823001a516e975a44906fcf022100d062a60611fc0f21d81fa3140741c8b6e650fff33d2c48aef69a3a40d7c7b3ca
爪哇
private static final String SHA256WITH_ECDSA = "SHA256withECDSA";
public static boolean isValidSignature(PublicKey pub, byte[] dataToVerify, byte[] signature) {
try {
Signature sign = Signature.getInstance(SHA256WITH_ECDSA, BouncyCastleProvider.PROVIDER_NAME);
sign.initVerify(pub);
sign.update(dataToVerify);
return sign.verify(signature);
} catch (Exception e) {
log.error("Error: " + e.getMessage());
}
return false;
}
相关分类