艺恩数据——返回值的生成方式

加密方式是:DES、ECB、key和iv都来自返回值截取

前言

网站:aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s
接口:aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9BUEkvR2V0RGF0YS5hc2h4

供学习交流

服务器生成流程

按照js解密流程猜测加密流程如下:

注释:返回值拿到后,不能直接解密,在其中截取出八位字符作为key或iv后,将此片段删除,得到 —— 真实的数据加密后的初始密文(且流程没有对字符串最后一位做改变)

1、首先,将原始数据使用key和iv加密得到一段初始密文
艺恩数据——返回值的生成方式_第1张图片
2、假设最后一位数据为y(可取值0123456789abcdef)
艺恩数据——返回值的生成方式_第2张图片
3、我们要将y对应的十进制+9,假设为m(代码中的index),m的取值范围:[9,24]
即:m=y的十进制数+9
4、然后我们在[0,15]的位置(为什么是0到15,按照代码来看,这个索引是某个十六进制字符对应的十进制数)插入长度为8的片段key,假设插入位置为Q(代码中的index2)(Q∈[0,15])
艺恩数据——返回值的生成方式_第3张图片
5、还记得刚才的位置m吧?在m的位置将Q(Q是下标)对应的十六进制字符插入进去即可
艺恩数据——返回值的生成方式_第4张图片

生成key和iv的python代码

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

你可能感兴趣的:(爬虫,爬虫,python,js逆向)