`
xiaoqingcai92
  • 浏览: 9812 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

Python3.6 AES/ECB/pkcs5padding 加解密

阅读更多

本人是个移动端测试,测试过程中造数据很麻烦,所以在写小工具,开发语言是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)

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics