Чтение значений int, хранящихся в файле в python - PullRequest
0 голосов
/ 03 декабря 2018

Я пишу программу для шифрования файла с использованием алгоритма RSA в python без использования библиотеки Crypto.Я сгенерировал ключи, а e, n и d хранятся в файле .pem.Теперь в другом строгом, где происходит шифрование, я использую значения e, d и n, но каждый раз, когда я запускаю скрипт, появляется ошибка:

 File "rsaencrypt.py", line 91, in <module>
 main()
 File "rsaencrypt.py", line 62, in main
 encrypt = pow(content, e, n)      
 TypeError: unsupported operand type(s) for pow(): 'bytes','_io.TextIOWrapper', '_io.TextIOWrapper'

Вот как я открываю файлв сценарии шифрования и с помощью pow () для шифрования файлов:

    n = open('nfile.pem', 'r')
    c = open('cfile.pem', 'r')
    d = open('dfile.pem', 'r'))
    encrypt = pow(content, e, n) 

Я искал в Интернете, как прочитать значение int из файла, но ничего не нашел.

Вот как я сохраняю значения в efile, dfile и nfile:

#saving the values of n, d and e for further use    
efile = open('efile.pem', 'w')
efile.write('%d' %(int(e)))
efile.close()

dfile = open('dfile.pem', 'w')
dfile.write('%d' %(int(d)))
dfile.close()

nfile = open('nfile.pem', 'w')
nfile.write('%d' % (int(n)))
nfile.close()

значения хранятся так: 564651648965132684135419864 .............. 454

Теперь, когда я хочу зашифровать файлы, мне нужно прочитать целочисленные значения, записанные в efile, dfile и nfile, чтобы использовать значения в pow () в качестве аргументов.

Ждем предложений.Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Рекомендованным способом является использование with, это гарантирует, что ваш файл будет закрыт после завершения работы с ним, вместо того, чтобы ожидать сбора мусора или явно вызывать f.close(), чтобы закрыть ваш файл.

n_results = []

with open('nfile.pem', 'r') as f:
    for line in f:
        #do something
        try:
            n.append(int(i))
        except TypeError:
            n.append(0) #you can replace 0 with any value to indicate a processing error

Также используйте блок try-except на случай, если в вашем файле есть шумы, которые невозможно преобразовать в целые числа.n_results возвращает список всех ваших значений из ваших файлов, которые вы можете использовать для агрегирования или объединения их позже для одного вывода.

Это будет лучшей основой для масштабирования вашего проекта и если вы будете иметь дело с большим количествомданные.

0 голосов
/ 03 декабря 2018

Функция open() возвращает объект файла, а не int.Вам необходимо преобразовать возвращаемый объект в int значение следующим образом:

n = open('nfile.pem', 'r')
n_value = int(list(n)[0])

и т. Д.

Другой вариант (тот же результат):

n = open('nfile.pem', 'r')
n_value = int(n.read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...