猿问

Java 的 BouncyCastle 并不总是验证 OpenSSL ECDSA 签名

我使用 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;


}


SMILET
浏览 208回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答