**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
27天前关门了。
改进这个问题
不幸的是,我还没有找到谷歌的答案,所以我想我不妨问问。
我正在尝试为一个服务编写一个库,它向客户端发送消息、时间戳和签名,签名应该在这里 sign(privkey, timestamp + message)
消息是原始的json。我的验证尝试如下:
public boolean validate(String pubkey, String signature, String timestamp, String message) throws Exception {
final var provider = new BouncyCastleProvider();
Security.addProvider(provider);
final var byteKey = Hex.decodeHex(pubkey);
final var pki = new SubjectPublicKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed25519), byteKey);
final var pkSpec = new X509EncodedKeySpec(pki.getEncoded());
final var kf = KeyFactory.getInstance("ed25519", provider);
final var publicKey = kf.generatePublic(pkSpec);
final var signedData = Signature.getInstance("ed25519", provider);
signedData.initVerify(publicKey);
signedData.update(timestamp.getBytes());
signedData.update(message.getBytes());
return signedData.verify(Hex.decodeHex(signature));
}
我已经尝试了我的验证方法,例如本期的示例代码,效果很好;特别是只有“真实”的数据才会失败。我很迷惑为什么会发生这种情况,并将感谢任何建议。
1条答案
按热度按时间frebpwbc1#
结果发现我使用的服务只是向我发送了格式错误的数据;我的代码实际上是正确的,但服务只是发送我无效数据的大部分时间。