首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BitcoinJ和报文验证

BitcoinJ和报文验证
EN

Stack Overflow用户
提问于 2015-08-19 09:29:36
回答 2查看 924关注 0票数 1

给定三条信息: message (String)、signature (String)和public address (string),我想验证签名。在Javascript、Python和PHP的库中,这是一个简单的方法调用。然而,在BitcoinJ (Java)中,我想不出一个简单的解决方案或示例。

首先,我只想验证一个签名。BitcoinJ有点过分了,但它是我所能找到的惟一的Java库。它似乎也没有我需要的直接方法调用。有一个方法调用需要公钥,但我有公钥。网上的讨论表明,公钥可以从签名中获得。然而,这似乎并不像听起来那么直接。Java也需要字节而不是字符串。听起来很简单,但努力并不奏效。我找不到任何例子。

那么,谁能为我提供一个使用Java语言(BitcoinJ或其他语言)进行简单消息验证的示例,其中包含上述三条信息?蒂娅!

EN

回答 2

Stack Overflow用户

发布于 2015-08-19 23:17:44

发布我自己的答案:

代码语言:javascript
复制
String loginSig = ""; // base64 encoded signature
String pubAddress = ""; // bitcoin public address
String message = "Hello World";

ECKey result = new ECKey().signedMessageToKey(message, loginSig);

if (pubAddress.equals(result.toAddress(NetworkParameters.prodNet()).toString())) {
    // success!
}
票数 1
EN

Stack Overflow用户

发布于 2017-04-04 15:39:14

这是对mohrt答案的更正,没有不推荐使用的调用,并根据提供的地址猜测网络。

代码语言:javascript
复制
/**
 * Validate a signature.
 *
 * @param address   Bitcoin address
 * @param signature Signature content
 * @param message   Signed message
 * @return true if the signature of a given message by the given address is correct.
 */
public boolean isValidSignature(String address, String signature, String message) {
    try {
        return ECKey.signedMessageToKey(message, signature).toAddress(Address.fromBase58(null, address).getParameters()).toString().equals(address);
    } catch (Exception e) {
        return false;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32085117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档