python实现AES加密

这篇具有很好参考价值的文章主要介绍了python实现AES加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.AES加密

2.需要导入的模块

3.定义好全局变量

4.编写加密函数

5.将密文解密

6.完整代码


 

1.AES加密

AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;

AES有多种加密模式,其中CBC分组模式是SSL、IPSec的标准。使用CBC加密模式时需要提前给出一段初始化向量iv,因为明文分组都是根据前一个明文分组加密的,所以第一个明文分组需要用到iv来加密。

2.需要导入的模块

import base64
from Crypto.Cipher import AES

3.定义好全局变量

iv = '1234567887654321'
key = 'miyaoxuyao16ziji'
data = 'hello world'

iv是初始化向量,第一组明文就是用它加密的

key是密钥,这里选择的长度是128比特,所以字符串的长度要固定在16

data就是需要加密的数据

4.编写加密函数

  1. AES的区块固定是128比特,也就是16字节,所以一开始要先判断明文是否小于16字节,如果小于16字节,需要补齐,为此要写一个补齐的函数。
    # 将原始的明文用空格填充到16字节
    def pad(data):
        pad_data = data
        for i in range(0,16-len(data)):
            pad_data = pad_data + ' '
        return pad_data
  2. 创建AES加密对象
  3. 用创建好的加密对象,对明文进行加密
  4. 把加密好的密文用base64编码
  5. 把字符串解码成字符串

代码:

# 将明文用AES加密
def AES_en(key, data):
    # 将长度不足16字节的字符串补齐
    if len(data) < 16:
        data = pad(data)
    # 创建加密对象
    AES_obj = AES.new(key.encode("utf-8"), AES.MODE_CBC, iv.encode("utf-8"))
    # 完成加密
    AES_en_str = AES_obj.encrypt(data.encode("utf-8"))
    # 用base64编码一下
    AES_en_str = base64.b64encode(AES_en_str)
    # 最后将密文转化成字符串
    AES_en_str = AES_en_str.decode("utf-8")
    return AES_en_str

5.将密文解密

解密是加密的逆过程,按着加密代码的逆序很容易就能写出

  1. 将密文字符串重新编码成bytes类型
  2. 将base64编码解开
  3. 创建AES解密对象
  4. 用解密对象对密文解密
  5. 将补齐的空格用strip()函数除去
  6. 将明文解码成字符串

 代码:文章来源地址https://www.toymoban.com/news/detail-400913.html

def AES_de(key, data):
    # 解密过程逆着加密过程写
    # 将密文字符串重新编码成二进制形式
    data = data.encode("utf-8")
    # 将base64的编码解开
    data = base64.b64decode(data)
    # 创建解密对象
    AES_de_obj = AES.new(key.encode("utf-8"), AES.MODE_CBC, iv.encode("utf-8"))
    # 完成解密
    AES_de_str = AES_de_obj.decrypt(data)
    # 去掉补上的空格
    AES_de_str = AES_de_str.strip()
    # 对明文解码
    AES_de_str = AES_de_str.decode("utf-8")
    return AES_de_str

6.完整代码

import base64
from Crypto.Cipher import AES

iv = '1234567887654321'
key = 'miyaoxuyao16ziji'
data = 'hello world'
# 将原始的明文用空格填充到16字节
def pad(data):
    pad_data = data
    for i in range(0,16-len(data)):
        pad_data = pad_data + ' '
    return pad_data

# 将明文用AES加密
def AES_en(key, data):
    # 将长度不足16字节的字符串补齐
    if len(data) < 16:
        data = pad(data)
    # 创建加密对象
    AES_obj = AES.new(key.encode("utf-8"), AES.MODE_CBC, iv.encode("utf-8"))
    # 完成加密
    AES_en_str = AES_obj.encrypt(data.encode("utf-8"))
    # 用base64编码一下
    AES_en_str = base64.b64encode(AES_en_str)
    # 最后将密文转化成字符串
    AES_en_str = AES_en_str.decode("utf-8")
    return AES_en_str

def AES_de(key, data):
    # 解密过程逆着加密过程写
    # 将密文字符串重新编码成二进制形式
    data = data.encode("utf-8")
    # 将base64的编码解开
    data = base64.b64decode(data)
    # 创建解密对象
    AES_de_obj = AES.new(key.encode("utf-8"), AES.MODE_CBC, iv.encode("utf-8"))
    # 完成解密
    AES_de_str = AES_de_obj.decrypt(data)
    # 去掉补上的空格
    AES_de_str = AES_de_str.strip()
    # 对明文解码
    AES_de_str = AES_de_str.decode("utf-8")
    return AES_de_str

data = AES_en(key, data)
print(data)
data = AES_de(key, data)
print(data)




到了这里,关于python实现AES加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 基于pycryptodome,实现对AES、DES、3DES、RSA等常用加密算法的使用,文末附各种加密的源码示例

    (中文名:加密圆顶)pycryptodome是一个基于c实现的Python库,它在2.x中支持2.7以上版本,或3.x中支持3.5以上版本的Python。 可以使用以下命令安装它: 该库支持以下特性 认证加密模式 Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB) AES加密在英特尔上的加速 Accelerated AES on Intel platf

    2023年04月09日
    浏览(89)
  • Python使用CBC加密模式进行AES加密

    在这个示例中,我们使用了 cryptography 库的 Cipher、algorithms、modes、backend 和 padding 模块。 encrypt 函数接受明文字符串、密钥和初始向量(IV)作为参数。 我们首先使用 Cipher 类来创建一个 AES 密码器对象,指定所需的 AES 算法、CBC 加密模式和密钥。然后,我们获取密码器的加密

    2024年01月24日
    浏览(48)
  • Python学习笔记——AES 加密/解密

    AES,高级加密标准。目前比较流行的对称加密算法。是一种对称加密算法,即加密和解密都用相同的密钥。 AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB等几种模式。CBC模式中还有一个偏移量参数IV。 AES加密有AES-128、AES-192和AES-256三种,分别对应三种密钥长

    2023年04月15日
    浏览(42)
  • 【Python】AES 128加密和解密

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

    2024年02月13日
    浏览(52)
  • AES对称加密实战——前端js加密后端python解密

    高级加密标准(AES, Advanced Encryption Standard),是一种最常见的对称加密算法 。其加密流程如下图所示,发送方通过密钥对明文加密后进行网络传输,接收方用同样的密钥将密文解密。在前后端通讯场景中,可利用AES算法对用户密码进行加密后传输,防止被抓包而造成密码泄露。

    2024年02月04日
    浏览(59)
  • RSA+AES实现混合加密

    为什么使用RSA + AES混合加密 1.加密介绍 RSA加密: 属于非对称加密,公钥用于对数据进行加密,私钥对数据进行解密,两者不可逆。公钥和私钥是同时生成的,且一一对应。比如:客户端拥有公钥,服务端拥有公钥和私钥。客户端将数据通过公钥进行加密后,发送密文给服务端

    2024年02月05日
    浏览(47)
  • S-AES加密实现

    S-AES是AES的简化版本,其只使用了16位的明文和16位的密钥进行加密。以下介绍S-AES的加密步骤。 测试数据:使用密钥 1010 0111 0011 1011 加密二进制明文 0110 1111 0110 1011 ,得出二进制密文 0000 0111 0011 1000 。 简化版的AES和原本AES的步骤差不多,只是在轮数和一些运算的字节数上有不

    2023年04月08日
    浏览(34)
  • Python对AES进行加密和解密的多种方法

    前言 本文是该专栏的第24篇,后面会持续分享python的各种干货知识,值得关注。 做过爬虫项目的同学,对AES加解密都有遇到过。 在密码学中,加密算法也分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。而双向加密包括 对称加密 和 非对称加密

    2023年04月14日
    浏览(37)
  • C# 实现对称加密算法(AES)与非对称加密算法(RSA),包含前端加密对应算法实现

    一种既简单速度又快的加密方式,加密与解密使用的都是同一个密钥,别名又叫做:单密钥加密;对称加密有很多公开算法,并且因为它效率很高,所以适用于加密大量数据的场合;但其密钥的传输过程是不安全的,并且容易被破解,密钥管理起来也相对麻烦。 需要两个密钥

    2024年02月09日
    浏览(65)
  • Java 实现 AES 加密和解密完整示例

    AES,全称为 Advanced Encryption Standard,是一种分组密码算法,用于保护敏感数据的传输和存储。AES 分为 128 位和 256 位两种密钥长度,可以对数据进行加密和解密,保证数据的安全性和完整性。AES 主要应用于电子商务、移动支付、网络安全等领域,被广泛运用于现代社会的各个

    2024年02月04日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包