当前位置: 首页 > article >正文

python高级加密算法AES对信息进行加密和解密

AES(高级加密标准)是一种广泛使用的对称加密算法,它以字节为单位处理数据,将明文分组加密成密文。AES算法的核心在于一个轮函数,该函数会对数据执行多次变换,包括字节代换、行移位、列混合和轮密钥加。这些操作确保了数据的安全性,使得原始数据经过AES加密后变得无法识别。

AES加密过程

AES加密过程涉及以下几个关键步骤:

  1. 字节代换:这一步使用一个预定义的S盒(替换表)来替换状态矩阵中的每个字节。这是一个非线性过程,增加了密码的复杂性。

  2. 行移位:状态矩阵中的行将根据其行号进行循环左移,第一行不动,第二行移动一个字节,以此类推。

  3. 列混合:这一步涉及到矩阵的乘法,将状态矩阵与一个固定的矩阵相乘,以实现混淆。

  4. 轮密钥加:将状态矩阵与轮密钥进行异或操作。轮密钥是通过密钥编排算法从原始密钥生成的。

AES解密过程

AES解密过程是加密过程的逆过程,涉及逆字节代换、逆行移位、逆列混合和轮密钥加。由于AES的每个步骤都是可逆的,因此可以通过执行相反的操作来解密数据。

密钥扩展

AES算法首先将初始密钥放入一个4x4的状态矩阵中,然后通过密钥编排算法扩展出足够的轮密钥。这个过程包括字循环、字节代换和轮常量异或等步骤。

python代码实现

import string 
import random
from Crypto.Cipher import AES
#生成指定长度的密钥
def keyGenerater (length):
    if length not in (16, 24, 32):
        return None
    x = string.ascii_letters + string.digits
    return ''.join([random.choice(x) for i in range (length) ]).encode ()
#返回加密/解密器
def encryptor_decryptor (key,mode):
    if mode == AES.MODE_ECB:
        return AES.new(key,mode)
    return AES.new (key, mode, b'0'* 16)
#使用指定密钥和模式对给定信息进行加密
def AESencrypt (key, mode, text):
    encryptor = encryptor_decryptor (key,mode) 
    return encryptor.encrypt(text)
#使用指定密钥和模式对给定信息进行解密 
def AESdecrypt (key,mode,text):
    decryptor = encryptor_decryptor (key,mode) 
    return decryptor.decrypt(text)
if __name__=='__main__':
    text= '玄之又玄,众妙之门。Python is excellent.' 
    key =keyGenerater(16)
    #随机选择 AES 的模式
    mode = random.choice((AES.MODE_CBC,AES.MODE_CFB,
    AES.MODE_ECB,AES.MODE_OFB) )
    if not key:
        print('密钥生成错误。') 
    else:
        print('key:', key.decode ())
        print('mode:',mode)
        print('Before encryption:', text)
        #明文必须以字节串形式,且长度为16的倍数 
        text_encoded =text.encode() 
        text_length = len (text_encoded)
        padding_length =16-text_length%16
        text_encoded = text_encoded + b'0' * padding_length 
        text_encrypted = AESencrypt (key, mode, text_encoded) 
        print('After encryption:', text_encrypted)
        text_decrypted = AESdecrypt (key, mode, text_encrypted) 
        print ('After decryption:',
            text_decrypted.decode()[:-padding_length])

 


http://www.kler.cn/a/514196.html

相关文章:

  • 【C++】模板(进阶)
  • 通过docker overlay2目录名查找容器名和容器ID
  • Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
  • Java 中 HashSet 集合元素的去重
  • 软件授权产品介绍
  • P14软件测试-功能测试
  • 深度学习-89-大语言模型LLM之AI应用开发的基本概念
  • 【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
  • 分布式ID介绍实现方案
  • 什么是贝叶斯推理智能体?为什么强于大模型?
  • 《C++ primer plus》第六版课后编程题-第02章
  • 华为E9000刀箱服务器监控指标解读
  • PyTorch使用教程(4)-如何使用torch.nn构建模型?
  • 四、华为交换机 STP
  • Java 权限修饰符
  • AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
  • 算法随笔_15: 找到K个最接近的元素
  • Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制
  • 62,【2】 BUUCTF WEB [强网杯 2019]Upload1
  • 422. 有效的单词方块
  • 在stm32中C语言编写的程序中,一个整形数据是怎么存储的,高位在前还是低位在前
  • Qt按钮美化教程
  • 高频交易中 FPGA 的作用及面试指南
  • 小红书用户作品列表 API 系列,返回值说明
  • Go CSP并发模型