吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2475|回复: 20
收起左侧

[求助] js解密aes加密的ts文件数据

[复制链接]
xue5hen 发表于 2022-11-23 23:29
25吾爱币
本帖最后由 xue5hen 于 2022-11-24 13:54 编辑

想写个m3u8的视频下载功能,但是卡在解密这个环节了。
在已知key、iv,并且已经拿到加密的ts数据(arraybuffer)的情况下,怎么还原出ts数据的真实面目?

我在网上搜了很多帖子,但试了都不能达到目的。

测试过无效的方法:
1)使用的库 aes-decrypter

[JavaScript] 纯文本查看 复制代码
new Promise((resolve, reject) => {
  let view = new DataView(keyContent.buffer)
  let keybytes = new Uint32Array([
    view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12),
  ])
  let keyiv = new Uint32Array(ivContent ? ivContent.buffer : [0, 0, 0, 0])
  new Decrypter(v, keybytes, keyiv, (err, decryptedBytes) => {
    if (err) reject(err)
    else resolve(decryptedBytes)
  })
})

2)使用的库 crypto-js
[JavaScript] 纯文本查看 复制代码
// AES解密
decrypt (buffer, key, iv) {
  key = this.key || key || ''
  iv = this.iv || iv || ''
  // 处理key和iv的格式
  let keyWA = key
  if (typeof key === 'string') {
    // 密钥转字节数组(16位)  
    let keyBy = stringToBytes(key)
    // 字节数组转Uint8Array
    let keyBv = new Uint8Array(keyBy)
    // Uint8Array转WordArray
    keyWA = CryptoJS.enc.u8array.parse(keyBv) 
  }
  let ivWA = iv
  if (typeof iv === 'string') {
    iv = iv.substring(0, 16)
    let ivBy = stringToBytes(iv)
    let ivBv = new Uint8Array(ivBy)
    ivWA = CryptoJS.enc.u8array.parse(ivBv)
  }
  let view = new Uint8Array(buffer)
  // 将Uint8Array 转成 WordArray
  let contentWA = CryptoJS.enc.u8array.parse(view)
  // base64字符串
  let dcBase64String = contentWA.toString(CryptoJS.enc.Base64)
  // 解密
  let decryptedData = CryptoJS.AES.decrypt(dcBase64String, keyWA, {
    iv: ivWA,
    mode: CryptoJS.mode[this.decryptMode],
    padding: CryptoJS.pad[this.decryptPadding]
  })
  // 把解密后的对象再转为base64编码,这步是关键,跟解密文字不同
  let d64 = decryptedData.toString(CryptoJS.enc.Base64)
  return base642arraybuffer(d64)
}


选择的这个答案其实不是我想要的,没回答到点上,不过这张截图让我看到点信息,间接帮我提供了一点思路,还是表示感谢。

最佳答案

查看完整内容

就是普通的加密解密啊 1读取m3u8地址list 2下载分块 ts 3解密ts 4播放

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
sywlyxgs + 1 + 1 就是 用JS的加解密 也是啊 把TS转换成base64 或者HEX 进去后转换成字节数组.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sywlyxgs 发表于 2022-11-23 23:29
QQ截图20221124121436.png
就是普通的加密解密啊

1读取m3u8地址list
2下载分块 ts
3解密ts
4播放
sywlyxgs 发表于 2022-11-23 23:46
温柔 发表于 2022-11-23 23:51
 楼主| xue5hen 发表于 2022-11-24 00:00
本帖最后由 xue5hen 于 2022-11-24 00:07 编辑
sywlyxgs 发表于 2022-11-23 23:46
请求链接发出来,密钥iv,发出来我试试

链接 https://mp42hls.cdn.bcebos.com/2022/zhiyeyaoshi/gaofenjiqiaoke/1.17xy/1.17xypt.m3u8
KEY  5bn7W6u5tq6qHvgm
iv    0xd18580625f3891bf11aa9a68368d2fff
[JavaScript] 纯文本查看 复制代码
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:15
#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/encryptedVideoKey?videoKeyId=job-nagwj6jjuncdytb0",IV=0xd18580625f3891bf11aa9a68368d2fff,KEYFORMAT=media-drm-player-binding
#EXTINF:10.000000,
1.17xypt.m3u8.0.ts


本来是想找个HLS的AES标准加密的视频,但是一时找不到,就先用这个做测试了,KEY应该是对的(参考了https://www.52pojie.cn/forum.php ... 5800&highlight=m3u8这个帖子),也有可能一时匆忙搞错。你有别的加密视频也行,只要能实际调试通就行。我主要是想知道代码逻辑哪儿不对,不对的话应该怎么写
boxer 发表于 2022-11-24 08:32
下载不了,提示缺少playerid
4899 发表于 2022-11-24 08:45
xue5hen 发表于 2022-11-24 00:00
链接 https://mp42hls.cdn.bcebos.com/2022/zhiyeyaoshi/gaofenjiqiaoke/1.17xy/1.17xypt.m3u8
KEY  5bn ...

执业药师,楼主成功了麻烦分享一份
4028574 发表于 2022-11-24 09:34
直接看我得下载器项目  不就完事了  多省心
我项目都开源得
 楼主| xue5hen 发表于 2022-11-24 10:44
boxer 发表于 2022-11-24 08:32
下载不了,提示缺少playerid

playerId=pid-1-5-1
这是个固定值,在视频插件源码里有
 楼主| xue5hen 发表于 2022-11-24 10:50
4028574 发表于 2022-11-24 09:34
直接看我得下载器项目  不就完事了  多省心
我项目都开源得

谢谢。不过我目的不是要下载视频,能下载的方法我知道有很多,只是要知道用js怎么实现解码
虽然videojs等插件的源码里也有,但是耦合性太强,单独筛出来工作量太大
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表