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