У меня имеется часть кода, которая занимается записью поступающих значений в текстовый файл программы:
public int writeData() < StreamWriter logStr = new StreamWriter(logPath, true); logStr.WriteLine(currentTime + «Calls are loaded»); // log information logStr.Close(); return 1; >
Также у меня есть функция для считывания и загрузки информации из того самого файла:
protected void readContent()
Как реализовать шифрование файла на стадии сохранения(writeData function) и его же дешифрование на стадии чтения(readContent function)? Я очень далек от темы шифрования данных, потому обратился за помощью на форум
Отслеживать
задан 4 дек 2020 в 10:01
JohnTheRipper8833 JohnTheRipper8833
141 8 8 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Например вот так с использованием AesManaged из System.Security.Cryptography .
class Program < static void Main(string[] args) < string fileName = «file.txt»; string text = «Hello World!»; byte[] key = Enumerable.Range(0, 32).Select(x =>(byte)x).ToArray(); // массив [ 0, 1, 2, . 31 ], для примера FileWriteAllText(fileName, text); Console.WriteLine(«Файл создан. Нажми любую клавишу.»); Console.ReadKey(true); EncryptFile(fileName, key); Console.WriteLine(«Файл зашифрован. Нажми любую клавишу.»); Console.ReadKey(true); DecryptFile(fileName, key); Console.WriteLine(«Файл расшифрован.»); Console.WriteLine(File.ReadAllText(fileName)); Console.ReadKey(true); > private static void EncryptFile(string path, byte[] key) < string tmpPath = Path.GetTempFileName(); using (FileStream fsSrc = File.OpenRead(path)) using (AesManaged aes = new AesManaged() < Key = key >) using (FileStream fsDst = File.Create(tmpPath)) < fsDst.Write(aes.IV); using (CryptoStream cs = new CryptoStream(fsDst, aes.CreateEncryptor(), CryptoStreamMode.Write, true)) < fsSrc.CopyTo(cs); >> File.Delete(path); File.Move(tmpPath, path); > private static void DecryptFile(string path, byte[] key) < string tmpPath = Path.GetTempFileName(); using (FileStream fsSrc = File.OpenRead(path)) < byte[] iv = new byte[16]; fsSrc.Read(iv); using (AesManaged aes = new AesManaged() < Key = key, IV = iv>) using (CryptoStream cs = new CryptoStream(fsSrc, aes.CreateDecryptor(), CryptoStreamMode.Read, true)) using (FileStream fsDst = File.Create(tmpPath)) < cs.CopyTo(fsDst); >> File.Delete(path); File.Move(tmpPath, path); > >
Вывод в консоль
Как сделать свой скрипт для шифрования (+ задачка)
Файл создан. Нажми любую клавишу. Файл зашифрован. Нажми любую клавишу. Файл расшифрован.
Hello World!
Источник: ru.stackoverflow.com
Шифровать строку Python
Принципы шифрования и криптографии. Расшифруйте послание!
- Используйте Simple Crypt для шифрования строки в Python
- Используйте библиотеку cryptocode для шифрования строки в Python
- Используйте пакет Cryptography для шифрования строки в Python
- Используйте алгоритм RSA для шифрования строки в Python
Шифрование можно определить как процесс преобразования обычного текста в зашифрованный текст. По сути, он используется для кодирования данных. Для процесса шифрования требуется ключ, который позже можно использовать для расшифровки исходного сообщения.
В этой статье будут обсуждаться различные методы, которые вы можете использовать для шифрования строки в Python.
Используйте Simple Crypt для шифрования строки в Python
Использование модуля Simple Crypt — это самый быстрый и простой способ добиться процесса шифрования для Python 2.7 и 3. Этот метод преобразует открытый текст в зашифрованный текст за секунды с помощью одной строчки кода.
Модуль PyCrypto предоставляет реализацию алгоритма для этой библиотеки и использует шифр AES256 . Этот метод включает проверку HMAC с помощью шифра SHA256 для уведомления об изменении или модификации зашифрованного текста.
Simple Crypt имеет две функции: encrypt и decrypt . Чтобы использовать обе эти функции, необходимо установить модули pycrypto и simplecrypt.
Следующий код использует simplecrypt для шифрования строки в Python:
from simplecrypt import encrypt, decrypt passkey = ‘wow’ str1 = ‘I am okay’ cipher = encrypt(passkey, str1) print(cipher)
Результатом этого кода будет кластер случайных букв.
Для декодирования / дешифрования зашифрованного текста мы будем использовать следующую команду:
print(decrypt(‘wow’, cipher))
I am okay
Используйте библиотеку cryptocode для шифрования строки в Python
Термин cryptocode — это простая библиотека, которая позволяет нам безопасно и просто шифровать и расшифровывать строки в Python 3 или выше. Помните, что эту библиотеку необходимо установить вручную; это можно сделать с помощью команды pip .
Программа ниже использует библиотеку cryptocode для шифрования строки в Python:
import cryptocode str_encoded = cryptocode.encrypt(«I am okay»,»wow») ## And then to decode it: str_decoded = cryptocode.
decrypt(str_encoded, «wow») print(str_decoded)
I am okay
Первым параметром функции будет строка, которую необходимо зашифровать. Второй параметр должен быть ключом, который будет использоваться для расшифровки.
Используйте пакет Cryptography для шифрования строки в Python
Cryptography — это пакет Python, который можно использовать для шифрования с симметричным ключом. Шифрование с симметричным ключом — это способ использования одного и того же ключа для процесса кодирования и декодирования.
Для использования этого метода шифрования необходимо установить библиотеку Cryptography ; это можно сделать с помощью команды pip .
Следующий код использует функции пакета cryptography для шифрования строки в Python:
from cryptography.fernet import Fernet str1 = «I am okay» key = Fernet.generate_key() fernet = Fernet(key) enctex = fernet.
encrypt(str1.encode()) dectex = fernet.decrypt(enctex).
decode() print(«The primordial string: «, str1) print(«The Encrypted message: «, enctex) print(«The Decrypted message: «, dectex)
The primordial string: I am okay The Encrypted message: The Decrypted message: I am okay
В приведенном выше коде мы импортируем Fernet из модуля cryptography.fernet . Затем мы генерируем ключ шифрования, который будет использоваться как для кодирования, так и для целей декодирования. Экземпляр класса Fernet создается с ключом шифрования. Затем строка шифруется экземпляром Fernet. Наконец, он расшифровывается с помощью экземпляра класса Fernet.
Шифрование с симметричным ключом — это простой способ шифрования строки. Единственный недостаток в том, что он сравнительно менее безопасен. Любой, у кого есть ключ, может прочитать зашифрованный текст.
Используйте алгоритм RSA для шифрования строки в Python
Алгоритм RSA в Python реализует шифрование с асимметричным ключом. Шифрование с асимметричным ключом использует два разных ключа для процесса шифрования и дешифрования.
Эти два ключа — Закрытый ключ и Открытый ключ. Открытый ключ является открытым и используется в процессе шифрования. Любой, у кого есть открытый ключ, может зашифровать и отправить данные; закрытый ключ есть только у получателя. Кроме того, кто-то, имеющий к нему доступ, также может расшифровать данные.
Для использования этого метода сначала необходимо установить библиотеку rsa . Вы можете использовать общую команду pip для установки этой библиотеки.
Следующий код использует алгоритм RSA для шифрования строки в Python:
import rsa pubkey, privkey = rsa.newkeys(512) str1 = «I am okay» enctex = rsa.encrypt(str1.
encode(),pubkey) dectex = rsa.decrypt(enctex, privkey).decode() print(«The primordial string: «, str1) print(«The Encrypted message: «, enctex) print(«The Decrypted message: «, dectex)
The primordial string: I am okay The Encrypted message: The Decrypted message: I am okay
В приведенном выше коде импортируется модуль rsa , а открытый и закрытый ключи генерируются с помощью функции rsa.newkeys() . Затем строка шифруется с помощью открытого ключа. Затем строку можно расшифровать, используя только закрытый ключ. Открытый и закрытый ключи в этой программе — pubkey и privkey соответственно.
Шифрование с асимметричным ключом обеспечивает лучшую безопасность, чем шифрование с симметричным ключом. Как и в первом случае, конкретный закрытый ключ доступен только получателю и используется для дешифрования. В то время как в последнем существует только один ключ, что делает процесс дешифрования более простым и менее защищенным от атак третьих лиц в середине между отправителем и получателем.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
Сопутствующая статья — Python String
- Как проверить, что строка пуста в Python
- Как удалить белый пробел в строке на Python
- Как конвертировать строку в дату на Python
- Как преобразовать строку в нижний кейс на Python 2 и 3
- Как проверить, содержит ли струна подвеску на Python
- Как преобразовать список в струну на Python
Источник: www.delftstack.com
Шифрование и дешифрование файлов с помощью Python
В этой статье мы обсудим как зашифровать и расшифровать файлы с помощью Python.
Введение
В развивающемся мире передачи данных и информации безопасность содержимого файлов остается одной из самых серьезных проблем для компаний. Некоторая информация может быть защищена паролем (электронная почта, логины), в то время как другая информация, передаваемая по электронной почте или FTP, неэффективна, если защищена каким-либо ключевым словом. Здесь шифрование файлов играет большую роль и обеспечивает безопасность и удобство, которые необходимы сторонам, участвующим в передаче файлов.
Давайте посмотрим, как мы можем зашифровать и расшифровать некоторые из наших файлов с помощью Python. Мы будем следовать симметричному шифрованию, что означает использование одного и того же ключа для шифрования и дешифрования файлов.
Чтобы продолжить изучение этого руководства, нам понадобится следующая библиотека Python: cryptography .
Если он у вас не установлен, откройте «Командную строку» (в Windows) и установите его, используя следующий код:
pip install cryptography
И нам также понадобится образец файла, с которым мы будем работать. Ниже представлен образец файла .csv с некоторыми данными об оценках учащихся:
grades.csv
Создание ключа
В нашем примере мы будем использовать симметричное уравнение:
from cryptography.fernet import Fernet
Fernet – это аутентифицированная криптография, которая не позволяет читать и / или изменять файл без «ключа».
Теперь давайте создадим ключ и сохраним его в той же папке, что и наш файл данных:
key = Fernet.generate_key() with open(‘mykey.key’, ‘wb’) as mykey: mykey.write(key)
Если вы проверите каталог, в котором находится ваш код Python, вы должны увидеть файл mykey.key . Вы можете открыть его в любом текстовом редакторе (в моем случае он отображается в локальном каталоге, потому что я использую VS Code). Файл должен содержать одну строку, которая представляет собой строку из некоторого порядка символов. Для меня это «VlD8h2tEiJkQpKKnDNKnu8ya2fpIBMOo5oc7JKNasvk =».
Загрузка ключа
После того, как мы сгенерировали ключ шифрования, нам нужно будет загрузить его в нашу среду, чтобы зашифровать / расшифровать файлы.
Следующий шаг очень прост и требует просто открыть файл mykey.key и сохранить его в локальной памяти:
with open(‘mykey.key’, ‘rb’) as mykey: key = mykey.read() print(key)
И чтобы убедиться, что загрузка ключа прошла успешна, мы увидим следующий вывод:
VlD8h2tEiJkQpKKnDNKnu8ya2fpIBMOo5oc7JKNasvk=
Ключ шифрования теперь хранится локально в качестве ключевой переменной.
Шифрование файла с помощью Python
Теперь, когда у нас есть файл для шифрования и ключ шифрования, мы напишем функцию, которая будет использовать их и возвращать зашифрованный файл:
f = Fernet(key) with open(‘grades.csv’, ‘rb’) as original_file: original = original_file.read() encrypted = f.encrypt(original) with open (‘enc_grades.csv’, ‘wb’) as encrypted_file: encrypted_file.write(encrypted)
Объяснение:
- Мы инициализируем объект Fernet как локальную переменную f.
- Затем мы считываем наши исходные данные (файл grades.csv).
- Затем мы шифруем данные с помощью объекта Fernet и сохраняем их как зашифрованные.
- И, наконец, мы записываем его в новый файл .csv под названием «enc_grades.csv».
Вы можете посмотреть зашифрованный файл здесь:
enc_grades.csv
Расшифровка файла с помощью Python
После того, как вы зашифровали файл и, например, успешно переместили его в другое место, вы захотите получить к нему доступ. Теперь эти данные находятся в зашифрованном формате. Следующим шагом будет его дешифрование до исходного содержимого.
Процесс, которому мы сейчас будем следовать, – это процесс, обратный шифрованию. Точно такой же процесс, но теперь мы перейдем от зашифрованного файла к расшифрованному:
f = Fernet(key) with open(‘enc_grades.csv’, ‘rb’) as encrypted_file: encrypted = encrypted_file.read() decrypted = f.decrypt(encrypted) with open(‘dec_grades.csv’, ‘wb’) as decrypted_file: decrypted_file.write(decrypted)
Объяснение:
- Мы инициализируем объект Fernet как локальную переменную f
- Затем мы читаем наши зашифрованные данные (файл enc_grades.csv)
- Затем мы расшифровываем данные с помощью объекта Fernet и сохраняем их в расшифрованном виде.
- И, наконец, мы записываем его в новый файл .csv под названием «dec_grades.csv».
Вы можете посмотреть расшифрованный файл здесь:
dec_grades.csv
Сравнивая «dec_grades.csv» с исходным «grades.csv», вы увидите, что на самом деле эти два файла имеют идентичное содержимое. Наш процесс шифрования / дешифрования прошел успешно.
Полный пример объектно-ориентированного программирования
Это бонусная часть, где я организовал все в более структурированном формате:
class Encryptor(): def key_create(self): key = Fernet.generate_key() return key def key_write(self, key, key_name): with open(key_name, ‘wb’) as mykey: mykey.write(key) def key_load(self, key_name): with open(key_name, ‘rb’) as mykey: key = mykey.read() return key def file_encrypt(self, key, original_file, encrypted_file): f = Fernet(key) with open(original_file, ‘rb’) as file: original = file.read() encrypted = f.encrypt(original) with open (encrypted_file, ‘wb’) as file: file.write(encrypted) def file_decrypt(self, key, encrypted_file, decrypted_file): f = Fernet(key) with open(encrypted_file, ‘rb’) as file: encrypted = file.read() decrypted = f.decrypt(encrypted) with open(decrypted_file, ‘wb’) as file: file.write(decrypted)
А это пример шифрования / дешифрования с использованием указанного выше класса:
encryptor=Encryptor() mykey=encryptor.key_create() encryptor.key_write(mykey, ‘mykey.key’) loaded_key=encryptor.key_load(‘mykey.key’) encryptor.file_encrypt(loaded_key, ‘grades.csv’, ‘enc_grades.csv’) encryptor.file_decrypt(loaded_key, ‘enc_grades.csv’, ‘dec_grades.csv’)
Вывод
В этой статье рассказывается о базовом симметричном шифровании и дешифровании файлов с помощью Python. Мы обсудили некоторые части криптографической библиотеки, а также создали полный пример процесса.
Источник: uproger.com