【Python】AES 128加密和解密

Python 系列

在这里插入图片描述



前言

AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、AES 是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

from Crypto.Cipher import AES
from binascii import unhexlify
import codecs

2.实际操作代码

代码如下(示例):

# !/usr/bin/env python
# -*-coding:utf-8 -*-
# @Description     :aes 128 的加密和解密操作
from Crypto.Cipher import AES
from binascii import unhexlify
import codecs

# key 是16字节,或者是16字节的倍数,
# data 也需要是16字节的倍数
key = '123456789abcdef123456789abcdef11'
key = unhexlify(key)


def do_encrypt(data):
    """
    加密
    :return:
    """
    # 转为字节
    data = unhexlify(data)
    # b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x11\x11'
    # 可以自己选择模式
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_data = cipher.encrypt(data)
    # 需要转为16进制
    last_data = codecs.encode(encrypted_data, 'hex')
    print('encrypted_data', encrypted_data)  # b'\xf2\x19\x08\x90\x98\x822\x81\xd5!\xc67lE\t5'
    print('last_data', last_data)  # b'f219089098823281d521c6376c450935'
    print('加密后的数据为:', bytes.decode(last_data))  # f219089098823281d521c6376c450935
    return bytes.decode(last_data)


def do_decrypt(data):
    """
    解密
    :param data:
    :return:
    """
    # 转为字节
    data = unhexlify(data)
    # 可以自己选择模式
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_data = cipher.decrypt(data)
    # 需要转为16进制
    last_data = codecs.encode(encrypted_data, 'hex')
    print('解密后的数据:', bytes.decode(last_data))


if __name__ == '__main__':
    encrypt_data = do_encrypt("00000000000000001111111111111111")
    do_decrypt(encrypt_data)


总结

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AES(Advanced Encryption Standard)是一种对称加密算法,常用于数据加密解密。在Python中,可以使用PyCryptodome库来实现AES加密算法。 首先,需要安装PyCryptodome库。可以使用以下命令进行安装: ``` pip install pycryptodome ``` 接下来,可以使用以下代码示例来实现AES加密解密: ```python from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytes # 生成随机的16字节密钥 key = get_random_bytes(16) # 创建AES加密器和解密器 cipher = AES.new(key, AES.MODE_CBC) decipher = AES.new(key, AES.MODE_CBC, cipher.iv) # 加密数据 data = b'This is a secret message' ciphertext = cipher.encrypt(pad(data, AES.block_size)) # 解密数据 plaintext = unpad(decipher.decrypt(ciphertext), AES.block_size) # 打印结果 print("加密后的数据:", ciphertext) print("解密后的数据:", plaintext) ``` 上述代码中,首先使用`get_random_bytes`函数生成一个16字节的随机密钥。然后,使用`AES.new`函数创建一个AES加密器和解密器,其中加密器使用CBC模式,并指定初始向量(iv)。接下来,使用加密器的`encrypt`方法对数据进行加密,并使用解密器的`decrypt`方法对密文进行解密。最后,使用`unpad`函数去除解密后的数据的填充,并打印加密后和解密后的数据。 注意:在实际使用中,需要确保加密解密使用相同的密钥和初始向量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值