У гэтым уроку вы даведаецеся, як шыфраваць і расшыфроўваць дадзеныя, напрыклад радок тэксту з выкарыстаннем крыптаграфічнай бібліятэкі на Python.
Шыфраванне - гэта працэс кадавання інфармацыі такім чынам, што доступ да яе могуць атрымаць толькі ўпаўнаважаныя бакі. Гэта дазваляе нам надзейна абараняць дадзеныя, якія мы не хочам, каб хто-небудзь бачыў і меў да іх доступ.
Звязаныя:
У гэтым прыкладзе мы будзем выкарыстоўваць сіметрычнае шыфраванне, што азначае, што той самы ключ, які мы выкарыстоўвалі для шыфравання дадзеных, таксама можа быць выкарыстаны для дэшыфравання.
Бібліятэка крыптаграфіі, якую мы тут выкарыстоўваем, пабудавана на алгарытме AES.
Па-першае, нам трэба ўсталяваць бібліятэку крыптаграфіі:
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()
Цяпер мы гатовыя зашыфраваць паведамленне. Гэта трохэтапны працэс:
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='
Каб расшыфраваць паведамленне, мы проста выклікаем 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