С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-44 / 5 / 0
Регистрация: 08.07.2016
Сообщений: 162

Подскажите как поменять код

07.09.2025, 15:24. Показов 1038. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код для secp256k1 проверка цифровой подписи. Подскажите как посмотреть "public_key" ? Понятно что должно быть что-то типа этого print('Is valid: ', а дальше не знаю что писать. "public_key" - это два больших числа, координаты точки X и Y. Публичный ключ зависит от приватного и пока не поменяешь приватный ключ, публичный тоже не поменяется.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 import random
 
 
def find_inverse(number, modulus):
    return pow(number, -1, modulus)
 
 
class Point:
    def __init__(self, x, y, curve_config):
        a = curve_config['a']
        b = curve_config['b']
        p = curve_config['p']
 
        if (y ** 2) % p != (x ** 3 + a * x + b) % p:
            raise Exception("The point is not on the curve")
 
        self.x = x
        self.y = y
        self.curve_config = curve_config
 
    def is_equal_to(self, point):
        return self.x == point.x and self.y == point.y
 
    def add(self, point):
        p = self.curve_config['p']
 
        if self.is_equal_to(point):
            slope = (3 * point.x ** 2) * find_inverse(2 * point.y, p) % p
        else:
            slope = (point.y - self.y) * find_inverse(point.x - self.x, p) % p
 
        x = (slope ** 2 - point.x - self.x) % p
        y = (slope * (self.x - x) - self.y) % p
        return Point(x, y, self.curve_config)
 
    def multiply(self, times):
        current_point = self
        current_coefficient = 1
 
        pervious_points = []
        while current_coefficient < times:
            # сохраняем текущую точку в листе предыдущих точек
            pervious_points.append((current_coefficient, current_point))
            # если можем умножить текущую точку на 2, умножаем
            if 2 * current_coefficient <= times:
                current_point = current_point.add(current_point)
                current_coefficient = 2 * current_coefficient
            # если не можем умножить на 2, находим наибольшую подходящую точку, и складываем текущую точку с ней
            else:
                next_point = self
                next_coefficient = 1
                for (previous_coefficient, previous_point) in pervious_points:
                    if previous_coefficient + current_coefficient <= times:
                        if previous_point.x != current_point.x:
                            next_coefficient = previous_coefficient
                            next_point = previous_point
                current_point = current_point.add(next_point)
                current_coefficient = current_coefficient + next_coefficient
 
        return current_point
 
 
secp256k1_curve_config = {
    'a': 0,
    'b': 7,
    'p': 115792089237316195423570985008687907853269984665640564039457584007908834671663
}
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
n = 115792089237316195423570985008687907852837564279074904382605163141518161494337
gp_point = Point(x, y, secp256k1_curve_config)
 
 
def sign_message(message, private_key):
    k = random.randint(1, n)
    r_point = gp_point.multiply(k)
    r = r_point.x % n
    if r == 0:
        return sign_message(message, private_key)
    k_inverse = find_inverse(k, n)
    s = k_inverse * (message + r * private_key) % n
    return r, s
 
 
def verify_signature(signature, message, public_key):
    (r, s) = signature
    s_inverse = find_inverse(s, n)
    u = message * s_inverse % n
    v = r * s_inverse % n
    c_point = gp_point.multiply(u).add(public_key.multiply(v))
    return c_point.x == r
 
 
# Тесты начинаются здесь
private_key = 123456789012345  # любое рандомное число
message = 12345  # любое целое число
public_key = gp_point.multiply(private_key)
 
signature = sign_message(message, private_key)
print('Signature: ', signature)
print('Is valid: ', verify_signature(signature, message, public_key))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2025, 15:24
Ответы с готовыми решениями:

Можно этот код оптимизировать (сделать поменьше условий)?
Этот код двигает по экрану (self.screen_rect) кораблик (self.rect) Мне кажется условий...

Нужно поменять этот код, чтобы было как на картинке, я пытался не получилось
from tkinter import * class Frame(Tk): #создание окна def __init__(self): ...

Найти наименьший элемент массива и поменять его местами с первым элементом. Не понимаю код
я нашла чей то код, но не понимаю его, обьясните что означает tmp, а так же зачем ноль min_index =...

4
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.09.2025, 17:12
не до конца понял, что спрашивается..
но строка 98 если будет print(public_key) - не оно?
0
-44 / 5 / 0
Регистрация: 08.07.2016
Сообщений: 162
07.09.2025, 17:19  [ТС]
Нет. Я пробовал так. Там одно короткое число. А должно быть что-то типа этого
Python
1
2
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
Только это точка GP в secp256k1 этот алгоритм работает например в Биткоине. Там публичный ключ это координата точки X на эллиптической кривой и это большое число.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.09.2025, 17:24
Цитата Сообщение от Profi II Посмотреть сообщение
x = 5506626302227734366957871889516853432625 0603453777594175500187360389116729240
y = 3267051002075881697808308513050704318447 1273380659243275938904335757337482424
так это же 68-69 строка, не?
0
-44 / 5 / 0
Регистрация: 08.07.2016
Сообщений: 162
07.09.2025, 19:49  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
так это же 68-69 строка, не?
Это просто пример какого размера должны получится 2 числа. Они будут такой же длины но другие. А то, что получается на выходе это тоже не то. Это цифровая подпись.

Добавлено через 2 часа 9 минут
Нашел другой код. Теперь приватный ключ генерируется случайным числом. Как сделать числом которое мне нужно?
Python
1
2
def generate_private_key(): # Random scalar < n
      return secrets.randbelow(curve.n)
Добавлено через 9 минут
Всё разобрался. Подскажите еще как сохранить данные в файл что выдает строка cmd ?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from keys import generate_private_key, derive_public_key
from utils import encode_point_uncompressed
from ecdsa import sign, verify
from params import curve
 
# Demo
 
# 1. Generate key pair
priv_key = 1    #generate_private_key()
pub_key_point = derive_public_key(priv_key)
pub_key_bytes = encode_point_uncompressed(pub_key_point)
 
print("[+] Private key:", hex(priv_key))
print("[+] Public key:", pub_key_bytes.hex())
 
# 2. Message to sign
msg = b"Elliptic curves are cool"
 
# 3. Sign message
signature = sign(msg, priv_key)
print("[+] Signature:", signature)
 
# 4. Verify signature
is_valid = verify(msg, signature, pub_key_point)
print("[+] Signature valid?", is_valid)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2025, 19:49
Помогаю со студенческими работами здесь

Нужно немножко поменять код
a = b = a.index(max(a)) z = a.index(min(a)) a, a = a, a print(a)

Подскажите что делает приведенный код
Здравствуйте. Подскажите что исполняет данный код, какие функции и прочее все что можно о нем...

Подскажите как запустить код
Вот код. Подскажите почему ничего не выводит и в чем ошибка. что не так??? import math class...

[("rc", rc) for rc in product(range(N), range(N)] подскажите пожалуйста что означает код. Не могу понять
подскажите пожалуйста что означает код. Не могу понять

Строка: Если убрать запятые из кода в Names, код работает неправильно. Подскажите, пожалуйста, как исправить?
Куратор говорит убрать запятые из кода в Names, когда убираю получается не правильно, подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru