本人是个移动端测试,测试过程中造数据很麻烦,所以在写小工具,开发语言是Python3.6;
开发过程中在加解密的路上遇到了很多坑(可以说是掉入深坑),但是为了方便自己,也方便别人开始努力的爬坑,下面分享下AES/ECB/pkcs5padding的加解密方法
重要的一点:算法
BS = AES.block_size pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s: s[0:-ord(s[-1])]
表示这个算法是我在网上找的,具体什么意思我还需要研究下的,等研究好再来补充,想要了解的小伙伴请自行百度哈!
这个算法非常的好用哦!
---------------------------------------------“收”!我们回正题--------------------------------------------
首先需要创建个方法,用于格式化参数,上代码的:
# str不是16的倍数那就补足为16的倍数 def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) # 返回bytes
这个方法是为后面的加解密的加密器进行初始化的,密码key的长度最普遍的就是16(AES-128),16bytes长度哈,16的足够用了,还有就是24(AES-192),32(AES-256)的,这个看个人需要哈,用别的就自己改改代码好了;key必须是16位的,不足的情况下会用0补位,不满16位为止!
--------------------------------------------华丽丽的飘过--------------------------------------------
#加密 def AES_encrypt_text(mobile,key): aes = AES.new(AES_encrypt.add_to_16(key), AES.MODE_ECB) # 初始化加密器 encrypted_text = str(base64.encodebytes(aes.encrypt (AES_encrypt.add_to_16(pad(mobile)))), encoding='utf-8').replace('\n','') # 执行加密并转码返回bytes return encrypted_text
加密:
首先初始化加密器,这里用到了上面说的格式化的方法;然后在进行加密,加密后需要转码的,记得将多余的换行替换掉哈,不然加密的信息就不对了哟(replace(‘\n’,'') replace方法就是替换的意思哈,不动的可以自行百度)
--------------------------------------------我是分割线--------------------------------------------
#解密 def AES_decrypt_text(text,key): # 初始化加密器 aes = AES.new(AES_encrypt.add_to_16(key), AES.MODE_ECB) # 优先逆向解密base64成bytes base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) decrypted_text = unpad(aes.decrypt(base64_decrypted).decode('utf-8')) decrypted_code = decrypted_text.rstrip('\0') return decrypted_code
解密:
其实加密懂了,解密也就懂了,解密就是将加密的顺序逆向行驶(车开多了,不好意思哈)
解密同样也是要先初始化加密器的,然后在优先逆向转码base64转成bytes,然后解码,再格式化,如果又补位的需要去除补位,不然会看到后面有好多的0
--------------------------------------------坑坑坑--------------------------------------------
过程中遇到的坑:
字符串的信息解密出来的最后几位是乱码,因为16位不足补位了,然后我的转码跟格式化用错了方法,所以导致前面解码都是对的,后面补位的0都变成了乱码。
解决方案:
解密过程中的转码需要用encoding='utf-8',解密后的格式化需要用decode(‘utf-8’)
--------------------------------------------忽略我吧!--------------------------------------------
友情提示:
当知道是AES加密 但是不知道具体的加密方式,可以到网上去尝试解码,看是否一致,确定了加密模式跟填充信息就可以进行了(我是个初学者(小白),所以用了个笨办法)。
网上解码的地址:http://tool.chacuo.net/cryptaes(仅(ting)供(hao)参(yong)考(de),hoho)
相关推荐
轻松实现 Python AES和Java AES/ECB/PKCS5Padding互转
在对接java开发的加密方法,整理的PHP 对接java AES/ECB/PKCS7Padding加密转16进制字符串,加解密方法
AES/ECB/PKCS5Padding 算法,用于数据加密,实现方式为Java。AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准
关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题一点小见解和代码。 有需要的可以下载一下。
JAVA解决AES ECB 模式下加密解密;附加国内三方AES加密网站---http://tool.chacuo.net/cryptaes;如有用解决您工作问题,烦请点个赞
AES/CBC/PKCS5Padding,加密解决 支持javascript、java、iOS
AES/ECB/PKCS5Padding C++实现
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,php端采用openssl加解密方式。调试可以访问http://tool.chacuo.net/cryptaes
实现了AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充。是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加...
C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制 C#加密解密中的详细整理
本文使用开运库cryptopp,实现AES/CBC/PKCS5Padding/ 的加解密,希望能帮助到有需要的人
由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,当时花了不少时间,所以记录一下,你们可以根据你们的需求调整。
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
c++ AES 加密
这是一个Android开发中的文本加密解密工具类,使用AES128对称加密算法,该资源是一个AndroidStudio3.1版本写的工程,其中包含一个工具类和一个调试活动界面,可解压后直接运行。这个是我为公司项目写的与服务器端...
C# AES加密采用ECB/PKCS7方式
JAVA、Python、PHP一致的任意长度secret秘钥加解密AES/ECB/PKCS5Padding算法实现代码
1. AES/ECB/PKCS5Padding C++实现,输出64位密文; 2.可以和java或是安卓等PKCS5Padding加密算法匹配;
最近找Qt下可用的与java通用的AES加密解密代码。 openssl不是很好用(不会和Qt编译到一起。。。) 所以参考网上的资料,终于找到了一个C++可用的代码,稍作修改。