Опис тега research-group
@CareyGregory невелику кількість випадково, ймовірно, нешкідливі, але в рекомендаціях накладні витрати мають на увазі невеликі суми кожен день два рази? Необхідно вказати, як встановити Убунту? поруч чи ні? @nitstorm : 7de611b50c283c1755b4007a4feb0379 компакт-диск ХХХ потім `LS-ла` і показати мені результат Це, здається, добре, я спробую сьогодні. Дякую за швидку відповідь. Я дам вам знати. Бережіть себе! @senshin дякую, буду редагувати моя відповідь, щоб включити це. Мені дуже цікаво, а скільки комп'ютерної інфраструктури і витрат на персонал банків сума, за ті ж гроші передані і кількість оброблюваних транзакцій.
Структура Der закодована підпису ECDSA виглядає наступним чином:
30
визначає послідовність
є asn1 кодування, яке супроводжується довжини з
(послідовність). р
і С.
Може бути або 32 або 33 байт, в залежності від того, наскільки великий дер закодовані значення. р
і и
завжди на чолі з 02
, в яких визначаються цілим числом є asn1. Нарешті, хвостів (ХТ
) байт представляє hashtype
Для того, щоб розібрати підпис, щоб отримати обидва значення потрібно перевірити їх довжину, а це завжди 1 байт, і витягти значення в залежності від результату. Ось код для цього:
деф parse_element(hex_str, зсув, element_size):
"""
:парам hex_str: рядку елемент.
:hex_str вул. тип: шестигранні
:параметр зсуву: початкове положення об'єкта всередині hex_str.
:тип зсуву: інт
:парам element_size: розмір елемента для вилучення.
:element_size тип: int
:повернення: витягнутий елемент з рядка, і оновлений зміщення після його вилучення.
:вул. rtype кортеж (, інт)
"""
повернення hex_str[зсув зсув+element_size], зсув+element_size
деф dissect_signature(hex_sig):
"""
Екстракти р, S і компоненти ХТ з биткоин підпису ECDSA.
:парам hex_sig: підписи в шістнадцятковому форматі.
:hex_sig вул. тип: шестигранні
:повернення: r, s, т як кортеж.
:rtype: кортеж(вул. вул. вул.)
"""
зсув = 0
# Перевіряємо SIG містить, принаймні, розмір і маркер послідовності
стверджувати, льон(hex_sig) > 4, "неправильна підпис формат".
послідовності, зсув = parse_element(hex_sig, офсет, 2)
# Перевірити маркер послідовності правильно
стверджувати послідовність == '30', "неправильної послідовності маркера."
signature_length, зсув = parse_element(hex_sig, офсет, 2)
# Перевіряємо довжину решти збігається з довжиною підпису + довжина hashflag (1 байт)
стверджувати, льон(hex_sig[зміщення])/2 == інт(signature_length, 16) + 1, "неправильної довжини".
# Отримати Р
маркер, зсув = parse_element(hex_sig, офсет, 2)
стверджувати маркера == '02', "неправильний Р маркер."
len_r, зсув = parse_element(hex_sig, офсет, 2)
len_r_int = інт(len_r, 16) * 2 # кожен байт являє собою 2 символа
Р, зсув = parse_element(hex_sig, офсет, len_r_int)
# Отримуємо s
маркер, зсув = parse_element(hex_sig, офсет, 2)
стверджувати маркера == '02', "неправильного маркера."
len_s, зсув = parse_element(hex_sig, офсет, 2)
len_s_int = інт(len_s, 16) * 2 # кожен байт являє собою 2 символа
и, зсув = parse_element(hex_sig, офсет, len_s_int)
# Отримуємо ХТ
ХТ, зсув = parse_element(hex_sig, офсет, 2)
стверджувати, зсув == льон(hex_sig), "неправильний розбір".
повернення р, с, ХТ
example_sig = ніхто insert_sig_here #
р, с, ХТ = dissect_signature(example_sig)
друку "р: %з\н: %з\НХТ: %з\п" % (р, с, ХТ)