Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > rsa


Автор: OzMod 17.11.2016, 00:12
Ниже код шифрования файла

Код

import rsa
#-------Считываю файл---
of = open(r"C:\test.txt","rb")
r = of.read()
of.close()
#------Шифрую-----
(pubkey, privkey) = rsa.newkeys(512)
mes = rsa.encrypt(r, pubkey)
#------Сохраняю шифрованную инфу обратно в файл---
of = open(r"C:\test.txt","wb")
of.write(mes)
of.close()


Теперь вопрос как его расшифровать этот файл!

Автор: baldman88 17.11.2016, 08:43
Без приватного ключа, который дается в паре с публичным никак. А так все просто:
Код

r = rsa.decrypt(mes, privkey)

Обычно ключи генерируются один раз и сохраняются. Публичный ключ отдается стороне, которая будет присылать зашифрованную информацию, а с помощью приватного она расшифровывается. Почитайте про криптосистемы с открытым ключом.

Автор: OzMod 17.11.2016, 10:40
baldman88, 
Да, спасибо я понял!
Код

import rsa
of = open("D:\Code.txt","rb")
message = of.read()
of.close()

(pubkey, privkey) = rsa.newkeys(512)
mes = rsa.encrypt(message, pubkey)
message = rsa.decrypt(mes, privkey)
#--------------
of = open("D:\Code.txt","wb")
of.write(mes)
of.close()

of = open("D:\Code.txt","rb")
of.read()
of.close()

of = open("D:\Code.txt","wb")
of.write(message)
of.close()

А можно шифрования и дешифрования сделать раздельно что бы при вызове одной функции файл шифровался а при вызове другой дешифровался?

Автор: baldman88 17.11.2016, 17:09
Да, можно. Просто ключи нужно сгенерировать и сохранить. При запуске программы читать эти ключи и работать с ними. Нет смысла каждый раз генерировать новые ключи. Если бы Вы более подробно описали задачу, то объяснить было бы проще.

Автор: OzMod 20.11.2016, 08:36
baldman88, Это понятно, ключи я сохраняю но когда я их считываю у меня вылетает ошибка тима данных..
-------------------------------

Автор: baldman88 20.11.2016, 10:49
Цитата(OzMod @ 20.11.2016,  08:36)
baldman88, Это понятно, ключи я сохраняю но когда я их считываю у меня вылетает ошибка тима данных..
-------------------------------

А как Вы сохраняете ключи? Случайно не как простой текст? Тогда понятно почему ошибка. Просто pubkey и privkey это объекты. И у этих объектов есть специальные функции для сохранения и восстановления ключей в текстовом виде. Вот пример:
Код

# сохраняем
pubkey_raw_data = pubkey.save_pkcs1() 
with open("~/rsa.pub", 'w') as pub_file: 
    pub_file.write(pubkey_raw_data)

privkey_raw_data = privkey.save_pkcs1() 
with open("~/rsa.prv", 'w') as priv_file: 
    priv_file.write(privkey_raw_data)

# загружаем
with open("~/rsa.pub", 'r') as pub_file: 
    pubkey_raw_data = pub_file.read()
pubkey = rsa.PublicKey.load_pkcs1(pubkey_raw_data)

with open("~/rsa.prv", 'r') as priv_file: 
    privkey_raw_data = priv_file.read()
privkey = rsa.PrivateKey.load_pkcs1(privkey_raw_data)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)