如何解决Android Studio 使用公钥验证椭圆 p256 签名时出现问题 ECDSA
我被这个问题困扰了一段时间。 我遵循了 How can I get a PublicKey object from EC public key bytes? 方法。它适用于他的示例,但不适用于我的示例。不知道哪里出错了。该示例适用于 node.js,但当使用 ECC 椭圆的公钥、消息和签名时,它总是返回 false。
byte[] pubKey = Hex.decode("04f491ccd1913757e10c2fe965ac764dd6af2f8bbfa47f4dddff0fe7736601701464d9fa02e6eada870ac626825e28d99bdf2d3a2742ba6dc99a56c663e875852a");
byte[] message = Hex.decode("613839633666323863616238633538623533313466626365636364326363633166646537643937383663373863373134313432646230343361313530323937657c416c6920416873616e7c43562d4d3957515253544d7c4d616c657c4d59537c323032312d30352d30355431303a33303a32392b30383a30307c3235383530303030317c39343735362d347c313234303538313030303030303130347c4b75616c61204c756d70757220486f73706974616c7c3031");
byte[] signature = Hex.decode("304502202f70fe9a8173a13daef97e8d59c9cd9aec3851c0f0568e5b5d61ddb752d1cb9e022100d9eccdcdd4b4a448bd36f3a9dafde08b55b8176f6b21bb6e1cc7d35a929dc1bf");
private static boolean isValidSignature(byte[] pubKey,byte[] message,byte[] signature) throws NoSuchAlgorithmException,NoSuchProviderException,InvalidKeyException,SignatureException,InvalidKeySpecException {
Signature ecdsaVerify = Signature.getInstance("SHA256withECDSA",new BouncyCastleProvider());
ecdsaVerify.initVerify(getPublicKeyFromBytes(pubKey));
ecdsaVerify.update(message);
System.out.println(getPublicKeyFromBytes(pubKey));
System.out.println(message);
System.out.println(signature);
return ecdsaVerify.verify(signature);
}
private static PublicKey getPublicKeyFromBytes(byte[] pubKey) throws NoSuchAlgorithmException,InvalidKeySpecException {
ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("P-256");
KeyFactory kf = KeyFactory.getInstance("ECDSA",new BouncyCastleProvider());
ECNamedCurveSpec params = new ECNamedCurveSpec("P-256",spec.getCurve(),spec.getG(),spec.getN());
ECPoint point = ECPointUtil.decodePoint(params.getCurve(),pubKey);
ECPublicKeySpec pubKeySpec = new ECPublicKeySpec(point,params);
ECPublicKey pk = (ECPublicKey) kf.generatePublic(pubKeySpec);
return pk;
}
感谢有人能提供帮助。亲切的问候。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。