Як зашыфраваць і расшыфраваць дадзеныя ў Python з дапамогай бібліятэкі крыптаграфіі

У гэтым уроку вы даведаецеся, як шыфраваць і расшыфроўваць дадзеныя, напрыклад радок тэксту з выкарыстаннем крыптаграфічнай бібліятэкі на Python.

Шыфраванне - гэта працэс кадавання інфармацыі такім чынам, што доступ да яе могуць атрымаць толькі ўпаўнаважаныя бакі. Гэта дазваляе нам надзейна абараняць дадзеныя, якія мы не хочам, каб хто-небудзь бачыў і меў да іх доступ.

Звязаныя:


У гэтым прыкладзе мы будзем выкарыстоўваць сіметрычнае шыфраванне, што азначае, што той самы ключ, які мы выкарыстоўвалі для шыфравання дадзеных, таксама можа быць выкарыстаны для дэшыфравання.

Бібліятэка крыптаграфіі, якую мы тут выкарыстоўваем, пабудавана на алгарытме AES.




Зашыфраваць дадзеныя ў Python

Па-першае, нам трэба ўсталяваць бібліятэку крыптаграфіі:



pip3 install cryptography

З крыптаграфічнай бібліятэкі нам трэба імпартаваць Fernet і пачаць генераваць ключ - гэты ключ неабходны для сіметрычнага шыфравання / дэшыфравання.

Стварыць ключ

Для генерацыі ключа мы называем generate_key() метад:

from cryptography.fernet import Fernet def generate_key():
'''
Generates a key and save it into a file
'''
key = Fernet.generate_key()
with open('secret.key', 'wb') as key_file:
key_file.write(key)

Нам трэба выканаць вышэйапісаны спосаб толькі адзін раз, каб генераваць ключ.


нататка:Вам трэба захоўваць гэты ключ у бяспечным месцы. Калі вы страціце ключ, вы не зможаце расшыфраваць дадзеныя, зашыфраваныя гэтым ключом.

Загрузіце ключ

Пасля таго, як мы стварылі ключ, нам трэба загрузіць ключ у наш метад для шыфравання дадзеных:

def load_key():
'''
Loads the key named `secret.key` from the current directory.
'''
return open('secret.key', 'rb').read()

Зашыфраваць паведамленне

Цяпер мы гатовыя зашыфраваць паведамленне. Гэта трохэтапны працэс:

  • 1 - кадзіраваць паведамленне
  • 2 - ініцыялізацыя класа Fernet
  • 3 - перадаць зашыфраванае паведамленне ў encrypt() метад

кадзіраваць паведамленне:

message = 'message I want to encrypt'.encode()

ініцыялізаваць клас Fernet:


f = Fernet(key)

зашыфраваць паведамленне:

encrypted_message = f.encrypt(message)

Поўны прыклад кода

Ніжэй прыведзены поўны працоўны прыклад шыфравання паведамлення ў python:

from cryptography.fernet import Fernet def generate_key():
'''
Generates a key and save it into a file
'''
key = Fernet.generate_key()
with open('secret.key', 'wb') as key_file:
key_file.write(key) def load_key():
'''
Load the previously generated key
'''
return open('secret.key', 'rb').read() def encrypt_message(message):
'''
Encrypts a message
'''
key = load_key()
encoded_message = message.encode()
f = Fernet(key)
encrypted_message = f.encrypt(encoded_message)
print(encrypted_message) if __name__ == '__main__':
encrypt_message('encrypt this message')

Выхад:

b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4='

Расшыфраваць дадзеныя ў Python

Каб расшыфраваць паведамленне, мы проста выклікаем decrypt() метад з Fernet бібліятэка. Памятаеце, нам таксама трэба загрузіць ключ, таму што ключ неабходны для расшыфроўкі паведамлення.


from cryptography.fernet import Fernet def load_key():
'''
Load the previously generated key
'''
return open('secret.key', 'rb').read() def decrypt_message(encrypted_message):
'''
Decrypts an encrypted message
'''
key = load_key()
f = Fernet(key)
decrypted_message = f.decrypt(encrypted_message)
print(decrypted_message.decode()) if __name__ == '__main__':
decrypt_message(b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=')

Выхад:

encrypt this message