Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242

Как получать и сохранять данные из списка текстового документа?

23.05.2019, 14:16. Показов 2038. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую Всех Друзья! Помогите пожалуйста не особо силен в программирование. Нужно изменить код скрипта, у меня есть большой список сжатых публичных ключей. Мне бы хотелось переписать этот скрипт, нужно чтобы данные из "compressed_key" брались из Текстового документа .txt (то есть из списка!) и сохранялись в новый документ в виде несжатого публичного ключа ( "uncompressed_key").
Можно ли это сделать? Заранее Благодарю за помощь!!!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def pow_mod(x, y, z):
    "Calculate (x ** y) % z efficiently."
    number = 1
    while y:
        if y & 1:
            number = number * x % z
        y >>= 1
        x = x * x % z
    return number
 
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
compressed_key = '02f0bb0774f61a63a610719f73c63f0019c0db62bdfc3682bc55f911538c766674'
y_parity = int(compressed_key[:2]) - 2
x = int(compressed_key[2:], 16)
a = (pow_mod(x, 3, p) + 7) % p
y = pow_mod(a, (p+1)//4, p)
if y % 2 != y_parity:
    y = -y % p
uncompressed_key = '04{:x}{:x}'.format(x, y)
print(uncompressed_key)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2019, 14:16
Ответы с готовыми решениями:

Как при закрытии документа ASP.NET сохранять данные в файл?
Хотелось бы узнать, как реализовать возможность в ASP.NET сохранять данные коллекции только! при закрытии документа? Ведь если в метод...

Как в StringGrid занести данные из обычного текстового документа?
Здравствуйте Программисты, я начал учить Delphi и вот хочу задать вопрос надеюсь кто нибудь ответит. Вопрос заключается в StringGrid, а...

Как ввести/вывести данные из текстового документа в DataGridView и наоборот?
Собственно вопрос в заголовке. Перерыл много ссылок,везде C#,а нужно на С++, пробовал переделывать под С++, что-то не работает. Ввод и...

13
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
23.05.2019, 14:26
Конечно. Считать из файла содержимое. Разбить его на отдельные ключи. В цикле сформировать новые ключи, а затем сохранить их в файле.
1
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 14:28  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
В цикле сформировать новые ключи, а затем сохранить их в файле.
Помогите пожалуйста изменить сам код скрипта?
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
23.05.2019, 14:38
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
with open('text.txt') as f:
    text = f.read()
compressed_keys = text.split('\n')
 
uncompressed_keys = []
 
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
for compressed_key in compressed_keys:
    # ваш код от y_parity = ...  до print
    uncompressed_keys.append(uncompressed_key)
 
with open('result.txt', 'w') as f:
    f.write('\n'.join(uncompressed_keys))
test.txt - каждый ключ с новой строки
1
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 19:13  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
Python
Не знаю почему но я получаю синтаксическую ошибку!
---------------------------
SyntaxError
---------------------------
expected an indented block
---------------------------
ОК
---------------------------
Миниатюры
Как получать и сохранять данные из списка текстового документа?  
0
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 22:00  [ТС]
Что-то исправил, но все равно выходит такая ошибка:

Python
1
2
3
4
Traceback (most recent call last):
  File "D:\bit\A2\02\PubKey_04txt6.py", line 9, in <module>
    y_parity = int(compressed_key[:2]) - 2
ValueError: invalid literal for int() with base 10: ''
Миниатюры
Как получать и сохранять данные из списка текстового документа?  
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
24.05.2019, 08:23
Посмотрите внимательно на мой код. Обратите внимание на то, как там расположены отступы. В вашем коде только строка y_parity = int(compressed_key[:2]) - 2 относится к блоку for. А это неверно.

Код на предпоследней изображ. верный. Только нужно строку y = -y % p занести в блок if.
0
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
24.05.2019, 08:37  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
Только нужно строку y = -y % p занести в блок if.
Покажите пожалуйста что нужно изменить чтобы все заработало ?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 with open('text.txt') as f:
    text = f.read()
compressed_keys = text.split('\n')
 
uncompressed_keys = []
 
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
for compressed_key in compressed_keys:
 y_parity = int(compressed_key[:2]) - 2
x = int(compressed_key[2:], 16)
a = (pow_mod(x, 3, p) + 7) % p
y = pow_mod(a, (p+1)//4, p)
if y % 2 != y_parity:
 y = -y % p
uncompressed_key = '04{:x}{:x}'.format(x, y)
uncompressed_keys.append(uncompressed_key)
with open('result.txt', 'w') as f:
 f.write('\n'.join(uncompressed_keys))
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
24.05.2019, 09:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
with open('text.txt') as f:
    text = f.read()
compressed_keys = text.split('\n')
 
uncompressed_keys = []
 
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
for compressed_key in compressed_keys:
    y_parity = int(compressed_key[:2]) - 2
    x = int(compressed_key[2:], 16)
    a = (pow_mod(x, 3, p) + 7) % p
    y = pow_mod(a, (p + 1) // 4, p)
    if y % 2 != y_parity:
        y = -y % p
    uncompressed_key = '04{:x}{:x}'.format(x, y)
    uncompressed_keys.append(uncompressed_key)
    
with open('result.txt', 'w') as f:
    f.write('\n'.join(uncompressed_keys))
1
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
26.05.2019, 20:00  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
Python
Опять ошибку выдает

Python
1
2
3
4
Traceback (most recent call last):
  File "D:\bit\A2\02\PubKey_04txt9.py", line 11, in <module>
    a = (pow_mod(x, 3, p) + 7) % p
NameError: name 'pow_mod' is not defined
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
27.05.2019, 07:46
А зачем вы из кода убрали определение функции pow_mod?
Из вашего вопроса скопируйте ее и вставьте в свой код.
0
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
27.05.2019, 10:11  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
скопируйте ее и вставьте в свой код

Я исправил как вы сказали и заработало! Но возникла другая проблема.
Видите ли при обработке значения из файла, например вот этого:

02097249BE9025284FD94BE194560DE068CC3266 07FC774FDA4BDC4A01DBE86FEB

Я получаю не правильный результат без добавления первой цифры "0"
Получается вот такой вот неправильный результат:

0497249BE9025284FD94BE194560DE068CC32660 7FC774FDA4BDC4A01DBE86FEB9826b3888c3e960 0e0ca118887a88cbab434870f2525e98964fed78 f913a4ecc

Как исправить алгоритм чтобы получать правильный публичный ключ:

04097249BE9025284FD94BE194560DE068CC3266 07FC774FDA4BDC4A01DBE86FEB9826b3888c3e96 00e0ca118887a88cbab434870f2525e98964fed7 8f913a4ecc


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
def pow_mod(x, y, z):
    "Calculate (x ** y) % z efficiently."
    number = 1
    while y:
        if y & 1:
            number = number * x % z
        y >>= 1
        x = x * x % z
    return number
 
with open('text.txt') as f:
    text = f.read()
compressed_keys = text.split('\n')
 
uncompressed_keys = []
 
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
for compressed_key in compressed_keys:
    y_parity = int(compressed_key[:2]) - 2
    x = int(compressed_key[2:], 16)
    a = (pow_mod(x, 3, p) + 7) % p
    y = pow_mod(a, (p + 1) // 4, p)
    if y % 2 != y_parity:
        y = -y % p
    uncompressed_key = '04{:x}{:x}'.format(x, y)
    uncompressed_keys.append(uncompressed_key)
    
with open('result.txt', 'w') as f:
    f.write('\n'.join(uncompressed_keys))
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
27.05.2019, 10:31
Я не знаю как работает ваш алгоритм и вряд ли смогу здесь чем-то помочь.
В глаза бросается только 25 строка. Если вы уверены, что 0 всегда должен добавляться в качестве 3-го символа результирующей строки, то замените
Python
1
    uncompressed_key = '04{:x}{:x}'.format(x, y)
на
Python
1
    uncompressed_key = '040{:x}{:x}'.format(x, y)
0
 Аватар для DewCooper
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
27.05.2019, 10:50  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
'040{:x}{:x}'.format(x, y)
Нет это другое совсем. Не в каждом публичном ключе должно быть 040....
Все несжатые публичные ключи должны содержать 130 цифр от 0-9 , A-F

Я нашел новый код и поставил туда ваши изменения которую вы мне посоветовали. За это спасибо вам ioprst

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
import binascii
 
with open('text.txt') as f:
    text = f.read()
compressed_key_hex = text.split('\n')
 
computed_uncompressed_key = []
 
p_hex = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F'
p = int(p_hex, 16)
x_hex = ''.join(compressed_key_hex[2:66])
x = int(x_hex, 16)
prefix = compressed_key_hex[0:2]
 
y_square = (pow(x, 3, p)  + 7) % p
y_square_square_root = pow(y_square, (p+1)//4, p)
if prefix == "02":
    y = (-y_square_square_root) % p
else:
    y = y_square_square_root
 
computed_y_hex = hex(y)[2:66]
computed_uncompressed_key = "04" + x_hex + computed_y_hex
 
with open('result.txt', 'w') as f:
    f.write('\n'.join(computed_uncompressed_key))

В этом коде я получаю результат такой что список создается от каждой цифры. То есть от "1". Вот я приложил результат в документ: https://pastebin.com/FM8wgd2m
Необходимо чтобы был список содержащее 130 цифр

В качестве файла 'Text.txt' я взял такие значение:

0200e7c810f4553fe1722522f8dcfc8e810757ef 427efefef79bdf08ddf3700fd5 0216b3e68fed004b2fea2119cdbb8ab2393dfe8f c99398da18e40b6e949e9e1278 022bbf0fcde9bcba6e1038b78bd6906ed00be95d 1a6f912a7352f5aca2d7bb6bbc 021060631ef4a610aebc3c9e24f5b0e33dcd0eb4 22b8223dbd75c1e6edfd21dd72 0218cbb66d6a417890aea6bf5f8a83a4d181a89c 5aba8121e20def5b42c311514e 025d8ea956802ed00ebec42b480c0eb77c6ada6e d3fceb40e5fff9aed0fa31c6b4 02264a8c56551abeb68d6112863249857a4360c3 8528d02b9313988ba062e6efed

Помогите пожалуйста что нужно исправить в этом коде чтобы был список содержащее 130 цифр?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2019, 10:50
Помогаю со студенческими работами здесь

Как загрузить данные из текстового документа в Combobox используя OpenFileDialog
Добрый вечер. Помогите пожалуйста никак не могу разобраться как загрузить данные из текстового документа в Combobox используя...

С формы списка документа изменить данные самого документа 1С 8.2 Управляемое приложение
Есть документ ЗаказКлиента с формой документа и с формой списка (формы управляемые). Есть у документа реквизит Выполнен тип Булево, и надо...

Как внести данные из документа в форме списка?
подскажите, как в форму списка справочника Номенклатура внести данные из документа Приходная накладная, его реквизита СредняяЦена? ...

Как сохранять и получать доступ к файлам (закаченным пользователем) за пределами корневой папки сайта на серве
Добрый день! Строю сайт, где пользователи смогут хранить свои файлы , для этого мне нужно создать папку для закаченных файлов за пределами...

Взятие списка с текстового документа и сохранение в нем
Помогите переделать программу так что бы она брала список студентов с текстового документа и сохраняла его в новом текстовом документе. ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru