Python 中的 AES 加密

Fariba Laiq 2023年10月10日
  1. Python 中加密和解密的區別
  2. 在 Python 中 AES 256 使用 PyCrypto
Python 中的 AES 加密

AES(首字母縮寫詞 Advanced Encryption Standard)是使用對稱金鑰加密的加密技術之一。

Python 中加密和解密的區別

加密是為了安全起見將(有意義的原始文字)轉換為密文(無意義的文字)的過程,以便未經授權的一方無法看到原始訊息。

解密將密文轉換為純文字以獲取原始訊息。

傳送者將使用金鑰加密訊息,接收者將使用相同的金鑰解密訊息。

在 Python 中 AES 256 使用 PyCrypto

PyCrypto 代表 Python Cryptography Toolkit,一個帶有與 cryptography 相關的內建功能的 Python 模組。

如果你使用的是 anaconda,你可以安裝此模組:

conda install -c anaconda pycrypto

Block size 設定為 16,因為在 AES 中輸入字串應該是 16 的倍數。Padding 用於通過附加一些額外的位元組來填充塊。

填充是在加密之前完成的。解密後,我們取消填充密文以丟棄額外的位元組並獲取原始訊息。

在這裡,我們建立了兩個函式,encryptdecrypt,它們使用 AES 技術。

# Python 3.x
import base64
import hashlib
from Crypto.Cipher import AES
from Crypto import Random

BLOCK_SIZE = 16


def pad(s):
    return s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(
        BLOCK_SIZE - len(s) % BLOCK_SIZE
    )


def unpad(s):
    return s[: -ord(s[len(s) - 1 :])]


def encrypt(plain_text, key):
    private_key = hashlib.sha256(key.encode("utf-8")).digest()
    plain_text = pad(plain_text)
    print("After padding:", plain_text)
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(private_key, AES.MODE_CBC, iv)
    return base64.b64encode(iv + cipher.encrypt(plain_text))


def decrypt(cipher_text, key):
    private_key = hashlib.sha256(key.encode("utf-8")).digest()
    cipher_text = base64.b64decode(cipher_text)
    iv = cipher_text[:16]
    cipher = AES.new(private_key, AES.MODE_CBC, iv)
    return unpad(cipher.decrypt(cipher_text[16:]))


message = input("Enter message to encrypt: ")
key = input("Enter encryption key: ")
encrypted_msg = encrypt(message, key)
print("Encrypted Message:", encrypted_msg)
decrypted_msg = decrypt(encrypted_msg, key)
print("Decrypted Message:", bytes.decode(decrypted_msg))

輸出:

#Python 3.x
Enter message to encrypt: hello
Enter encryption key: 12345
After padding: hello











Encrypted Message: b'r3V0A0Ssjw/4ZOKL42/hWSQOLKy7lt9bOVt7D75RA3E='
Decrypted Message: hello

我們已要求使用者輸入 keymessage 進行加密。在輸出中,顯示了加密和解密的訊息。

作者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

相關文章 - Python Encryption

相關文章 - Python Decryption