博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】pyCryptodome模块实现AES加密、解密
阅读量:4102 次
发布时间:2019-05-25

本文共 2528 字,大约阅读时间需要 8 分钟。

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

本文主要通过库进行AES的简单加解密。

# -*- coding: utf-8 -*-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''#作者:cacho_37967865#博客:https://blog.csdn.net/sinat_37967865#文件:encryption.py#日期:2019-07-31#备注:多种加解密方法    # pip install pycryptodome用pyCryptodome模块带的aes先将秘钥以及要加密的文本填充为16位   AES key must be either 16, 24, or 32 bytes long'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''import base64from Crypto.Cipher import AES#  bytes不是32的倍数那就补足为32的倍数def add_to_32(value):    while len(value) % 32 != 0:            value += b'\x00'    return value     # 返回bytes# str转换为bytes超过32位时处理def cut_value(org_str):    org_bytes = str.encode(org_str)    n = int(len(org_bytes) / 32)    print('bytes长度:',len(org_bytes))    i = 0    new_bytes = b''    while n >= 1:        i = i + 1        new_byte = org_bytes[(i-1)*32:32*i-1]        new_bytes += new_byte        n = n - 1    if len(org_bytes) % 32 == 0:                   # 如果是32的倍数,直接取值        all_bytes = org_bytes    elif len(org_bytes) % 32 != 0 and n>1:         # 如果不是32的倍数,每次截取32位相加,最后再加剩下的并补齐32位        all_bytes = new_bytes + add_to_32 (org_bytes[i*32:])    else:        all_bytes = add_to_32 (org_bytes)          # 如果不是32的倍数,并且小于32位直接补齐    print(all_bytes)    return all_bytesdef AES_encrypt(org_str,key):    # 初始化加密器    aes = AES.new(cut_value(key), AES.MODE_ECB)    #先进行aes加密    encrypt_aes = aes.encrypt(cut_value(org_str))    # 用base64转成字符串形式    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')  # 执行加密并转码返回bytes    print(encrypted_text)    return(encrypted_text)def AES_decrypt(secret_str,key):    # 初始化加密器    aes = AES.new(cut_value(key), AES.MODE_ECB)    # 优先逆向解密base64成bytes    base64_decrypted = base64.decodebytes(secret_str.encode(encoding='utf-8'))    # 执行解密密并转码返回str    decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '')    print(decrypted_text)if __name__ == '__main__':    org_str = 'http://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217590&idx=1&sn=14532c49bc8cb0817544181a10e9309f&chksm=90460825a7318133e7905c02e708d5222abfea930e61b4216f15b7504e39734bcd41cfb0a26d&scene=27#wechat_redirect'    # 秘钥    key = '123abc'    secret_str = AES_encrypt(org_str,key)    AES_decrypt(secret_str,key)

你可能感兴趣的文章
[Dxperience.8.*]报表预览控件PrintControl设置
查看>>
“”(十六进制值 0x1D)是无效的字符
查看>>
postgresql update returning
查看>>
python面向对象01
查看>>
HttpSessionListener的用法
查看>>
模拟系统提示框
查看>>
Failed to load property source from location 'classpath:/application.properties'
查看>>
大整数相乘
查看>>
Mysql-where子句与having子句的区别
查看>>
profile bashrc bash_profile 之间的区别和联系
查看>>
每个开发人员现在应该下载的十种必备工具
查看>>
【海量视频】2013年上半年BPM厂商'K2'市场活动资料集锦
查看>>
原型模式
查看>>
Python入门 学习笔记
查看>>
LostRoutes项目日志——在main.js中添加多分辨率适配
查看>>
重要学习参考资料
查看>>
黑马程序员-6 泛型
查看>>
素数高效率筛选法
查看>>
php的lareval框架配置出错
查看>>
Linux常用命令汇总-速查
查看>>