赞
踩
第一步 首先在浏览器打开一个m3u8地址,获取的内容大概如下:
#EXTM3U
#EXT-X-VERSION:3 协议版本号
#EXT-X-ALLOW-CACHE:NO 指定文件是否可以缓存
#EXT-X-MEDIA-SEQUENCE:268 第一个媒体片段的序列号 在 PlayList中只有唯一的序号,相邻之间序号+1。
#EXT-X-TARGETDURATION:3 表示最大的秒数
#EXT-X-KEY:METHOD=AES-128,URI="https://xxx/1111",IV=0x39333764333063306139653264353066 表示 Media Segment 已加密, 该值用于解密.
#EXTINF:2.015, 指定每个媒体段(ts)的持续时间
https://xxxxx.ts
重点为
表示 Media Segment 已加密, 该值用于解密.
#EXT-X-KEY:METHOD=AES-128,URI=“https://xxx/1111”,IV=0x39333764333063306139653264353066
给出了加密方法为AES-128,获取key地址为https://xxx/1111,偏移量为0x39333764333063306139653264353066
第二步 获取加密的key
在浏览器访问https://xxx/1111获取key,注意这个地址一般都有权限校验的。
获取内容可能是478efff857304aa6
(长度为16),十六进制数的字符串。
第三步 从m3u8中下载ts文件
第四步 解密文件
import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.HexUtil; import cn.hutool.crypto.Mode; import cn.hutool.crypto.Padding; import cn.hutool.crypto.symmetric.AES; import java.io.File; public class test { public static void main(String[] args) { // key必须为16位 String key = "478efff857304aa6"; // iv:偏移量,ECB模式不需要,CBC模式下必须为16位 String iv = HexUtil.decodeHexStr("61643134663639616237363436366639"); AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes()); byte[] decrypt = aes.decrypt(FileUtil.readBytes("C:/laker/1.ts")); FileUtil.writeBytes(decrypt, new File("C:/laker/3.ts")); } }
第五步 解密后的文件就可以直接播放了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。