python encrypt 实现AES加密的实例详解

作者:眼镜儿 时间:2023-02-08 18:02:22 

AES加密方式有五种 : ECB, CBC, CTR, CFB, OFB

从安全性角度推荐cbc算法

windows 下安装 : pip install pycryptodome

linux 下安装 : pip install pycrypto

cbc加密需要一个十六位的key 和一个十六位的iv(偏移量)

ecb加密不需要iv

aes cbc 加密的python实现


from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
 if len(text.encode('utf8')) % 16:
   add = 16 - (len(text.encode('utf8')) % 16)
 else:
   add = 0
 text = text + '\0' * add
 return text

# 加密
def encrypt(text):
 key = '9999999999999999'.encode('utf8')
 mode = AES.MODE_CBC
 iv = b'qqqqqqqqqqqqqqqq'
 text = add_to_16(text)
 cryptos = AES.new(key, mode, iv)
 cipher_text = cryptos.encrypt(text)
 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
 return b2a_hex(cipher_text)

# 解密后去掉空格
def decrypt(text):
 key = '9999999999999999'.encode('utf8')
 mode = AES.MODE_CBC
 iv = b'qqqqqqqqqqqqqqqq'
 cryptos = AES.new(key, mode, iv)
 plain_text = cryptos.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
 a = encrypt('hello')
 b = decrypt(a)
 print('加密', a)
 print('解密', b)

aes ecb加密, 没有偏移量iv


from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
 if len(text.encode('utf8')) % 16:
   add = 16 - (len(text.encode('utf8')) % 16)
 else:
   add = 0
 text = text + '\0' * add
 return text

# 加密
def encrypt(text):
 key = '9999999999999999'.encode('utf8')
 mode = AES.MODE_ECB
 text = add_to_16(text)
 cryptos = AES.new(key, mode)
 cipher_text = cryptos.encrypt(text)
 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
 return b2a_hex(cipher_text)

# 解密后去掉空格
def decrypt(text):
 key = '9999999999999999'.encode('utf8')
 mode = AES.MODE_ECB
 cryptos = AES.new(key, mode)
 plain_text = cryptos.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
 a = encrypt('hello')
 b = decrypt(a)
 print('加密', a)
 print('解密', b)

来源:https://www.cnblogs.com/zhangjian0092/p/12335542.html

标签:python,encrypt,AES加密
0
投稿

猜你喜欢

  • mysql本地登录无法使用端口号登录的解决方法

    2024-01-25 06:51:30
  • Python实现CET查分的方法

    2023-06-13 12:05:51
  • python开发利器之ulipad的使用实践

    2021-07-25 00:55:17
  • MySql模糊查询json关键字检索方案示例

    2024-01-16 13:57:44
  • python实现在函数中修改变量值的方法

    2023-12-15 04:15:02
  • Python LeNet网络详解及pytorch实现

    2021-11-15 01:19:17
  • vscode检测到#include错误请更新includePath的解决方法

    2022-10-14 22:58:04
  • Jupyter安装拓展nbextensions及解决官网下载慢的问题

    2023-11-24 20:50:54
  • Bootstrap复选框和单选按钮美化插件(推荐)

    2023-07-02 05:24:53
  • windows11安装SQL server数据库报错等待数据库引擎恢复句柄失败解决办法

    2024-01-16 07:18:52
  • MySQL 8.0.29 解压版安装配置方法图文教程

    2024-01-16 03:20:50
  • python实现扫雷游戏的示例

    2023-04-14 12:07:21
  • Django的restframework接口框架自定义返回数据格式的示例详解

    2023-06-13 05:13:51
  • Linux 自动备份oracle数据库详解

    2023-07-14 08:11:41
  • javascript事件冒泡实例分析

    2023-07-02 05:29:58
  • C#简单查询SQLite数据库是否存在数据的方法

    2024-01-13 04:34:48
  • 如何操作Access数据库?

    2009-11-11 19:23:00
  • Python threading中lock的使用详解

    2023-01-16 08:32:26
  • 拒绝盗图!教你怎么用python给图片加水印

    2022-05-29 21:42:51
  • SEM之医疗网站跳出率 逼迫访客跳出网站的六宗罪

    2012-03-05 20:13:36
  • asp之家 网络编程 m.aspxhome.com