M3u8 解密时, key取自 网页中十六进制的数组, 这组key是有问题吗?

网页上解密后的key:

img

[-39, -128, -87, 94, 45, -34, 80, 77, -97, 48, -33, 90, 2, 51, 119, 98]

这组key 在创建 aes 解密对象的时候总是报错。

根据网上: 在源代码里面的是16进制的,而这里面的是十进制的,所以我们需要用到进制转换,包括后面我们还要再次转成ascii码.
代码如下:

def get_asc_key(key):
   '''
   获取密钥,把16进制字节码转换成ascii码
   :param key:从网页源代码中获取的16进制字节码
   :return: ascii码格式的key
   '''
   # 最简洁的写法
   # asc_key = [chr(int(i,16)) for i in key.split(',')]
   # 通俗易懂的写法
   key = key.split(',')
   asc_key = ''
   for i in key:
       i = int(i, 16)  # 16进制转换成10进制
       i = chr(i)  # 10进制转换成ascii码
       asc_key += i
   return asc_key

请问下, 这组 key 是有什么问题吗


这组key 看着是没问题的, 它是 int8array, 有正负号, 我们需只要将他转换成 uint8array 就可以了,

let arr =   [-39, -128, -87, 94, 45, -34, 80, 77, -97, 48, -33, 90, 2, 51, 119, 98]  ; // 这里 简化写的, 其实是个int8array的数组
// 转换成无符号的 uint8array
arr = new Uint8Array(arr);

// 现在就可以拿去解密了

总结: 注意 array 的类型.

打印下循环输出的值看看,报啥错

问题私下已经解决: 答案在上面.