Ich habe meine ECKey key
. Um ein ECDSASignature
Objekt mit BitcoinJ zu erstellen, müssen wir aufrufen ECDSASignature mySignature = key.sign(Sha256Hash input)
.
Ist das Sha256Hash input
meine Nachricht? Oder ist es das Ergebnis von Sha256(byte[] myArray)
?
Was ist, wenn ich keine Nachricht zum Signieren habe? Ist es akzeptabel, die zu signieren, key.getPrivKeyBytes()
um eine zu erstellen ECDSASignature
, oder ist es nicht akzeptabel, weil es Informationen preisgibt, einschließlich in getPrivKeyBytes()
und als Ergebnis meinen privaten Schlüssel?
Und wenn es nicht akzeptabel ist, was muss meine Botschaft sein? Kann ich unterschreiben, was ich will, um meine zu erstellen ECDSASignature
?
Das Signieren der Bytes des privaten Schlüssels von ECKey key
ist nicht akzeptabel, da Sie angreifbar sind, wenn Sie Informationen über Ihren privaten Schlüssel freigeben.
Beim Signieren einer Nachricht (als String) müssen Sie abschätzen:
byte[] result= sha256(message)
Das Ergebnis ist ein byte[] und dieses Array wird schließlich in Folgendes eingefügt:
Sha256Hash input= new Sha256Hash(result);
Dann ist das Verfahren einfach, um die ECDSASignature zu erzeugen . Sie müssen Folgendes tun:
ECDSASignature signature= key.sign(input);
und schließlich, um Ihre Unterschrift zu validieren, müssen Sie Folgendes überprüfen:
key.verify(input, signature)
Nick Odell
gtopal
Amaclin
gtopal
Nick Odell
Wallet.signTransaction(Wallet.SendRequest.forTx(transaction));
Wenn Sie versuchen, eine Nachricht zu signieren, sollten Sie die Nachricht zuerst mit SHA256 hashen.