В този урок ще научите как да шифровате и дешифрирате данни, напр. низ от текст, използващ криптографската библиотека в 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