Для создания такого же приватного ключа в Python, вы можете использовать модуль `cryptography`. Вот пример кода:
```python
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
# Создание нового приватного ключа
private_key = ec.generate_private_key(ec.SECP256K1())
# Сериализация приватного ключа в PEM формат
pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
# Приватный ключ в шестнадцатеричном виде
private_key_hex = private_key.private_numbers().private_value.to_bytes(32, "big").hex()
print(private_key_hex)
print(pem.decode())
```
Чтобы переписать код для создания цифровой подписи с использованием закрытого ключа из шестнадцатеричной строки в Python, используйте модуль `cryptography` и его методы `ecdsa` и `utils`. Вот пример кода:
```python
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat, load_pem_public_key
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric.utils import decode_dss_signature
def verify_signature(message, signature, public_key_pem):
# Загрузка открытого ключа из PEM формата
public_key = load_pem_public_key(public_key_pem, default_backend())
# Разделение цифровой подписи на r и s
r, s = decode_dss_signature(signature)
# Проверка подписи
try:
public_key.verify(
encode_dss_signature(r, s),
message.encode(),
ec.ECDSA(hashes.SHA256())
)
print("Подпись верна")
except InvalidSignature:
print("Подпись недействительна")
message = "Hello, world!"
# Приватный ключ в шестнадцатеричном виде
private_key_hex = "your_private_key_hex_string"
# Загрузка приватного ключа из шестнадцатеричной строки
private_numbers = ec.EllipticCurvePrivateNumbers(
int.from_bytes(bytes.fromhex(private_key_hex), "big"),
ec.SECP256K1()
)
private_key = private_numbers.private_key(default_backend())
# Получение открытого ключа из приватного ключа
public_key = private_key.public_key()
# Сериализация открытого ключа в PEM формат
public_key_pem = public_key.public_bytes(
encoding=Encoding.PEM,
format=PublicFormat.SubjectPublicKeyInfo
)
# Создание цифровой подписи
signature = private_key.sign(
message.encode(),
ec.ECDSA(hashes.SHA256())
)
# Проверка цифровой подписи
verify_signature(message, signature, public_key_pem)
```
Обратите внимание, что примеры кода основаны на использовании модуля `cryptography` версии 3.4.