ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีเข้ารหัสและถอดรหัสข้อมูล เช่น สตริงข้อความโดยใช้ไลบรารีการเข้ารหัสใน 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)
ตัวอย่างโค้ดแบบเต็ม
ด้านล่างนี้เป็นตัวอย่างการทำงานเต็มรูปแบบของการเข้ารหัสข้อความในหลาม:
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