ECKey.ECDSASСоздание подписи

у меня есть ECKey key. Чтобы создать ECDSASignatureобъект с помощью BitcoinJ, мы должны вызвать ECDSASignature mySignature = key.sign(Sha256Hash input).

Это Sha256Hash inputмое сообщение? Или это результат Sha256(byte[] myArray)?

Что делать, если у меня нет сообщения для подписи? Допустимо ли подписывать key.getPrivKeyBytes(), чтобы создать файл ECDSASignature, или это неприемлемо, потому что он раскрывает информацию, в том числе getPrivKeyBytes()и, в результате, раскрывает мой закрытый ключ?

И если это неприемлемо, каким должно быть мое сообщение? Могу ли я подписать все, что захочу, чтобы создать свой ECDSASignature?

Вы пытаетесь подписать транзакцию? Есть лучшие способы сделать это в биткойне. Что вы пытаетесь подписать?
Скажем, во-первых: я пытаюсь подписать транзакцию, а во-вторых, что я собираюсь подписать сообщение в виде строковой переменной. Каковы эти лучшие способы? Спасибо.
Спасибо. На самом деле я создам сообщение (как строковую переменную), а не целую транзакцию, и, наконец, я подпишу это сообщение, чтобы выполнить пожелания моей программы по функциональности.
@Top Если вы пытаетесь подписать транзакцию, вы должны использовать Wallet.signTransaction(Wallet.SendRequest.forTx(transaction));Если вы пытаетесь подписать сообщение, вы должны сначала хэшировать сообщение с помощью SHA256.

Ответы (1)

Подписание байтов закрытого ключа ECKey keyнеприемлемо, поскольку вы уязвимы для раскрытия информации о вашем закрытом ключе.

В случае подписания сообщения (в виде строки) вы должны оценить:

 byte[] result= sha256(message)

Результатом будет byte[] и этот массив, наконец, будет вставлен в:

 Sha256Hash input= new Sha256Hash(result);

Затем процедура проста для создания ECDSASignature . Вы должны сделать следующее:

ECDSASignature signature= key.sign(input);

и, наконец, чтобы подтвердить свою подпись, вы должны проверить следующее:

key.verify(input, signature)