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

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

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

Author24 — интернет-сервис помощи студентам
Приветствую Всех Друзья! Помогите пожалуйста не особо силен в программирование. Нужно изменить код скрипта, у меня есть большой список сжатых публичных ключей. Мне бы хотелось переписать этот скрипт, нужно чтобы данные из "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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2019, 14:16
Ответы с готовыми решениями:

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

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

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

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

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

13
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
23.05.2019, 14:26 2
Конечно. Считать из файла содержимое. Разбить его на отдельные ключи. В цикле сформировать новые ключи, а затем сохранить их в файле.
1
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 14:28  [ТС] 3
Цитата Сообщение от ioprst Посмотреть сообщение
В цикле сформировать новые ключи, а затем сохранить их в файле.
Помогите пожалуйста изменить сам код скрипта?
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
23.05.2019, 14:38 4
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
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 19:13  [ТС] 5
Цитата Сообщение от ioprst Посмотреть сообщение
Python
Не знаю почему но я получаю синтаксическую ошибку!
---------------------------
SyntaxError
---------------------------
expected an indented block
---------------------------
ОК
---------------------------
Миниатюры
Как получать и сохранять данные из списка текстового документа?  
0
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
23.05.2019, 22:00  [ТС] 6
Что-то исправил, но все равно выходит такая ошибка:

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 7
Посмотрите внимательно на мой код. Обратите внимание на то, как там расположены отступы. В вашем коде только строка y_parity = int(compressed_key[:2]) - 2 относится к блоку for. А это неверно.

Код на предпоследней изображ. верный. Только нужно строку y = -y % p занести в блок if.
0
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
24.05.2019, 08:37  [ТС] 8
Цитата Сообщение от 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 9
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
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
26.05.2019, 20:00  [ТС] 10
Цитата Сообщение от 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 11
А зачем вы из кода убрали определение функции pow_mod?
Из вашего вопроса скопируйте ее и вставьте в свой код.
0
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
27.05.2019, 10:11  [ТС] 12
Цитата Сообщение от ioprst Посмотреть сообщение
скопируйте ее и вставьте в свой код

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

02097249BE9025284FD94BE194560DE068CC326607FC774FDA4BDC4A01DBE86FEB

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

0497249BE9025284FD94BE194560DE068CC326607FC774FDA4BDC4A01DBE86FEB9826b3888c3e960 0e0ca118887a88cbab434870f2525e98964fed78f913a4ecc

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

04097249BE9025284FD94BE194560DE068CC326607FC774FDA4BDC4A01DBE86FEB9826b3888c3e96 00e0ca118887a88cbab434870f2525e98964fed78f913a4ecc


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 13
Я не знаю как работает ваш алгоритм и вряд ли смогу здесь чем-то помочь.
В глаза бросается только 25 строка. Если вы уверены, что 0 всегда должен добавляться в качестве 3-го символа результирующей строки, то замените
Python
1
    uncompressed_key = '04{:x}{:x}'.format(x, y)
на
Python
1
    uncompressed_key = '040{:x}{:x}'.format(x, y)
0
2 / 2 / 0
Регистрация: 10.09.2016
Сообщений: 242
27.05.2019, 10:50  [ТС] 14
Цитата Сообщение от 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' я взял такие значение:

0200e7c810f4553fe1722522f8dcfc8e810757ef427efefef79bdf08ddf3700fd5 0216b3e68fed004b2fea2119cdbb8ab2393dfe8fc99398da18e40b6e949e9e1278 022bbf0fcde9bcba6e1038b78bd6906ed00be95d1a6f912a7352f5aca2d7bb6bbc 021060631ef4a610aebc3c9e24f5b0e33dcd0eb422b8223dbd75c1e6edfd21dd72 0218cbb66d6a417890aea6bf5f8a83a4d181a89c5aba8121e20def5b42c311514e 025d8ea956802ed00ebec42b480c0eb77c6ada6ed3fceb40e5fff9aed0fa31c6b4 02264a8c56551abeb68d6112863249857a4360c38528d02b9313988ba062e6efed

Помогите пожалуйста что нужно исправить в этом коде чтобы был список содержащее 130 цифр?
0
27.05.2019, 10:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2019, 10:50
Помогаю со студенческими работами здесь

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

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

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

не получается ввести данные из текстового документа
Помогите пожалуйста изменить ввод массива и его размерность. Сейчас вводится через TextBox, а...

Взять числовые данные с текстового документа
Здравствуйте, начинаю только изучать C#. Задача, взять числовые данные с текстового документа,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru