Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีเข้ารหัสและถอดรหัสข้อมูลใน Python โดยใช้ Cryptography Library

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