Я пытаюсь подписать необработанное сообщение, например «Hello World», используя библиотеку Python bitcoinlib. Цель состоит в том, чтобы создать подпись сообщения в кодировке Base64, которую можно проверить. Однако bitcoinlib, похоже, не предлагает простого способа прямой подписи сообщений.
Вот что я пробовал:
Использование bitcoinlib.keys.Key: Я попытался использовать объект ключа для подписи, но он не поддерживает подпись произвольных сообщений напрямую.
Использование bitcoinlib.transactions.Transaction: этот класс предназначен для подписи транзакций биткойнов, но он не поддерживает подпись в необработанном виде. сообщения.
Проблемы:
Transaction.inputs_add() не является допустимым методом.
Transaction.sign() не принимает сообщения. в качестве аргумента.
Похоже, что bitcoinlib в первую очередь предназначена для обработки транзакций, а не произвольных сообщений.
Ожидаемое поведение: я хочу подписывать необработанные сообщения типа «Hello World» и получать действительную подпись в кодировке Base64 с помощью bitcoinlib. . Есть ли лучший подход для достижения этой цели с помощью bitcoinlib или мне нужна другая библиотека?
Дополнительная информация:
Версия Python: 3.11
Версия биткойнлиба: 0.6.0
from bitcoinlib.keys import Key
from bitcoinlib.transactions import Transaction
class BitcoinClient:
def __init__(self, private_key_wif: str) -> None:
"""
Initialize the BitcoinClient with a WIF private key.
:param private_key_wif: The private key in Wallet Import Format (WIF).
"""
self.key = Key(import_key=private_key_wif)
self.address = self.key.address()
def get_address(self) -> str:
"""
Get the Bitcoin address associated with the private key.
:return: Bitcoin address as a string.
"""
return self.address
def sign_message(self, message: str) -> str:
"""
Sign a message using the private key.
:param message: The message to be signed.
:return: The signature as a base64-encoded string.
"""
tx = Transaction(network=self.key.network)
tx.inputs_add(self.key.address())
signature = tx.sign(self.key, message=message)
return signature
def verify_message(self, message: str, signature: str) -> bool:
"""
Verify a signed message.
:param message: The original message.
:param signature: The base64-encoded signature to verify.
:return: True if the signature is valid, False otherwise.
"""
tx = Transaction(network=self.key.network)
return tx.verify_message(self.key.address(), message=message, signature=signature)
if __name__ == "__main__":
# Expected address and signature for testing
address_from_priv = ''
# Signed message type which i should see
signed = 'AUCozKGE8DkRwCIKgJdzwIY6nQ4lYkUlFnQqry5sDaKa9rHrpIUoIyD9I+nkRA0tCf1nwlfCeqUmMl6aSDBaLwn6'
# Your WIF private key and message
private_key_wif = ""
message = "Hello world!"
# Initialize the BitcoinClient
try:
signer = BitcoinClient(private_key_wif)
# Sign the message
signature = signer.sign_message(message)
# Get the Bitcoin address
address = signer.get_address()
# Verify the signature
is_valid = signer.verify_message(message, signature)
# Output the results
print(f"Bitcoin Address: {address}")
print(f"Signature: {signature}")
print(f"Is signature valid: {is_valid}")
print(f"Is signature matching expected: {signature == signed}")
print(f"Is address matching expected: {address == address_from_priv}")
except ValueError as e:
print(f"Error: {e}")
Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-python
Bitcoinlib подписывает необработанное текстовое сообщение с помощью Python ⇐ Python
Программы на Python
1734016873
Anonymous
Я пытаюсь подписать необработанное сообщение, например «Hello World», используя библиотеку Python bitcoinlib. Цель состоит в том, чтобы создать подпись сообщения в кодировке Base64, которую можно проверить. Однако bitcoinlib, похоже, не предлагает простого способа прямой подписи сообщений.
Вот что я пробовал:
Использование bitcoinlib.keys.Key: Я попытался использовать объект ключа для подписи, но он не поддерживает подпись произвольных сообщений напрямую.
Использование bitcoinlib.transactions.Transaction: этот класс предназначен для подписи транзакций биткойнов, но он не поддерживает подпись в необработанном виде. сообщения.
Проблемы:
Transaction.inputs_add() не является допустимым методом.
Transaction.sign() не принимает сообщения. в качестве аргумента.
Похоже, что bitcoinlib в первую очередь предназначена для обработки транзакций, а не произвольных сообщений.
Ожидаемое поведение: я хочу подписывать необработанные сообщения типа «Hello World» и получать действительную подпись в кодировке Base64 с помощью bitcoinlib. . Есть ли лучший подход для достижения этой цели с помощью bitcoinlib или мне нужна другая библиотека?
Дополнительная информация:
Версия Python: 3.11
Версия биткойнлиба: 0.6.0
from bitcoinlib.keys import Key
from bitcoinlib.transactions import Transaction
class BitcoinClient:
def __init__(self, private_key_wif: str) -> None:
"""
Initialize the BitcoinClient with a WIF private key.
:param private_key_wif: The private key in Wallet Import Format (WIF).
"""
self.key = Key(import_key=private_key_wif)
self.address = self.key.address()
def get_address(self) -> str:
"""
Get the Bitcoin address associated with the private key.
:return: Bitcoin address as a string.
"""
return self.address
def sign_message(self, message: str) -> str:
"""
Sign a message using the private key.
:param message: The message to be signed.
:return: The signature as a base64-encoded string.
"""
tx = Transaction(network=self.key.network)
tx.inputs_add(self.key.address())
signature = tx.sign(self.key, message=message)
return signature
def verify_message(self, message: str, signature: str) -> bool:
"""
Verify a signed message.
:param message: The original message.
:param signature: The base64-encoded signature to verify.
:return: True if the signature is valid, False otherwise.
"""
tx = Transaction(network=self.key.network)
return tx.verify_message(self.key.address(), message=message, signature=signature)
if __name__ == "__main__":
# Expected address and signature for testing
address_from_priv = ''
# Signed message type which i should see
signed = 'AUCozKGE8DkRwCIKgJdzwIY6nQ4lYkUlFnQqry5sDaKa9rHrpIUoIyD9I+nkRA0tCf1nwlfCeqUmMl6aSDBaLwn6'
# Your WIF private key and message
private_key_wif = ""
message = "Hello world!"
# Initialize the BitcoinClient
try:
signer = BitcoinClient(private_key_wif)
# Sign the message
signature = signer.sign_message(message)
# Get the Bitcoin address
address = signer.get_address()
# Verify the signature
is_valid = signer.verify_message(message, signature)
# Output the results
print(f"Bitcoin Address: {address}")
print(f"Signature: {signature}")
print(f"Is signature valid: {is_valid}")
print(f"Is signature matching expected: {signature == signed}")
print(f"Is address matching expected: {address == address_from_priv}")
except ValueError as e:
print(f"Error: {e}")
Подробнее здесь: [url]https://stackoverflow.com/questions/79275547/bitcoinlib-signing-raw-text-message-using-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия