加密方式是:DES、ECB、key和iv都来自返回值截取
网站:aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s
接口:aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9BUEkvR2V0RGF0YS5hc2h4
供学习交流
按照js解密流程猜测加密流程如下:
注释:返回值拿到后,不能直接解密,在其中截取出八位字符作为key或iv后,将此片段删除,得到 —— 真实的数据加密后的初始密文(且流程没有对字符串最后一位做改变)
1、首先,将原始数据使用key和iv加密得到一段初始密文
2、假设最后一位数据为y(可取值0123456789abcdef)
3、我们要将y对应的十进制+9,假设为m(代码中的index),m的取值范围:[9,24]
即:m=y的十进制数+9
4、然后我们在[0,15]的位置(为什么是0到15,按照代码来看,这个索引是某个十六进制字符对应的十进制数)插入长度为8的片段key,假设插入位置为Q(代码中的index2)(Q∈[0,15])
5、还记得刚才的位置m吧?在m的位置将Q(Q是下标)对应的十六进制字符插入进去即可
def handle(a, b, c):
'''
根据js算法改写的
'''
if b == 0:
return a[c:]
else:
res = '' + a[0:b]
res += a[b + c:]
return res
def get_encodeData_key_iv(encode_data):
'''key和iv是一样的'''
index = int(encode_data[-1], 16) + 9 # 倒数第一个字符转为十进制+9,index就是文中的m
index2 = int(encode_data[index], 16) # index2就是Q
encode_data = handle(encode_data, index, 1)#将m处的一个字符挖掉
IV = encode_data[index2:index2 + 8] # 选出八个字符当做iv和key
encode_data = handle(encode_data, index2, 8) # 把iv这八个字符删除掉
return encode_data, IV, IV