2015-08-19 3 views
1

Учитывая три части информации: сообщение (строка), подпись (строка) и общий адрес (строка), я хочу проверить подпись. В библиотеках для Javascript, Python и PHP это простой вызов метода. Однако в BitcoinJ (Java) я не могу найти простого решения или примера.BitcoinJ и подтверждение сообщения

Во-первых, я хочу проверить подпись. BitcoinJ переполнен, но это единственная библиотека Java, которую я смог найти. У него также нет прямого вызова метода для того, что мне нужно. Существует вызов метода, требующий открытого ключа, но у меня есть общий адрес. Обсуждения в Интернете показывают, что открытый ключ может быть получен из подписи. Однако, похоже, это не так прямо, как кажется. Java также хочет использовать байты вместо строк. Звучит достаточно легко, но усилия не работают. Нет примеров, которые я могу найти.

Может ли кто-нибудь предоставить мне пример простой проверки сообщений на Java (BitcoinJ или иным образом) с тремя вышеуказанными сведениями? ТИА!

ответ

1

проводки мой собственный ответ:

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! 
} 
+0

ECKey.signedMessageToKey является статическим методом, так что линия должна быть: результат ЭКЕЙ = ECKey.signedMessageToKey (сообщение, loginSig); –

0

Вот исправление mohrt ответа без уходящим вызова, и угадывание сеть из предоставленного адреса.

/** 
* 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; 
    } 
} 
Смежные вопросы