Шифрование любых данных, в отличии от хэширования, предполагает обратное действие, дешифрование. Для многих задач становится необходимым шифровать данные, чтобы другие люди не могли получить доступ к этим данным. Сегодня мы взглянем на пример подобного действия.
Для шифрования мы будем использовать необходимые модули. Мы импортируем их так:
Ключевым в данном случае будет модуль Fernet. С помощью него мы будем генерировать ключ и сохранять его в файл.
Для начала генерируем ключ с помощью метода generate_key() и запишем его в переменную key:
Создаем функцию, чтобы убедиться, что в конце пути будет слэш.
Функция checkForEnd проверяет находимся ли мы корневой директории (C:, D: и т.д.), если это так, то добавляет один обратный слэш. Чтобы пропустить символ обратного слэша, нужно поставить второй обратный слэш перед ним так "\\"
Мы будем сохранять файл в ту же папку, где расположен наш .py файл. Для этого используется модуль os:
os.path.join() мы соединили путь к нашему файлу питон
и само название файла filekey.key
!!!Для исполняемых файлов типа .exe, вместо __file__ нужно использовать sys.executable как аргумент
Для начала нам нужно открыть файл с помощью встроенной конструкции with open() as и записать туда ключ так:
Дальше считываем ключ той же конструкцией и запишем в key:
Создаем элемент объекта Fernet:
мы будем использовать его методы fernet.encrypt() и fernet.decrypt() для шифрования и дешифрования данных.
Мы создадим тестовый текстовый файл NewNode.txt в той же директории (в той же папке), где мы находимся. И запишем в него любое предложение. Далее открываем файл с параметрами для чтения то есть rb - read bytes
Далее с помощью метода encrypt, созданного нами объекта fernet, шифруем данные, которые мы считали.
Осталось вписать зашифрованные данные в наш файл и заменить тем самым его содержимое.
Готово. Теперь все данные в текстовом файле зашифрованы и могут быть расшифрованы с помощью дешифрования.
Чтобы дешифровать содержимое файла, нам нужно сделать практически тоже самое. Для начала создадим второй Python файл с расширением .py , его мы будем использовать для дешифрования файла. Начала файла будет точно такое же:
Далее мы должны считать наш ключ, адрес ключа записан в переменную myPathFull
Так же как и раньше, создаем элемент класса Fernet с аргументом считанного нами ключа
Теперь нужно так же считать содержимое файла, который нужно дешифровать
Записываем в переменную decrypted расшифрованные данные, с помощью метода decrypt
Осталось записать расшифрованные данные в файл