python的AES加密解密
- 作者: 嗫?暁雲?
- 来源: 51数据库
- 2022-08-12
需要安装python Crypto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 PADDING = '\0' #PADDING = ' ' pad_it = lambda s: s+(16 - len(s)%16)*PADDING key = '1234567812345678' iv = '1234567812345678' source = 'Test String' generator = AES.new(key, AES.MODE_CBC, iv) crypt = generator.encrypt(pad_it(source)) cryptedStr = base64.b64encode(crypt) print cryptedStr generator = AES.new(key, AES.MODE_CBC, iv) recovery = generator.decrypt(crypt) print recovery.rstrip(PADDING)
注意python下需要用'\0'来填充,如果是空格来填充,python加密得到的字符串会跟其他语言不同。另外注意generator在加密的 时候使用过,解密的时候需重新生成再解密,否则解密失败。最后得到的字符串,在python控制台看到尾部是多个NUL这样的东西,要这样 recovery.rstrip(PADDING)去除掉才是原始字符串。
可以看到aes加密的中间结果是byte[]类型,直接new String(byte[])会看不到有意义的中间结果,这里用的是base64,是因为各个语言都有这样的支持。在同个语言内,也有bytesToHexString这样的方式。
跨语言加解密的要求是:AES/CBC/ZeroPadding 128位模式,key和iv一样,编码统一用utf-8。不支持ZeroPadding的就用NoPadding.
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
