news 2026/9/2 9:57:57

my-tv 央视频请求加密解析:你每换一次台,都在偷偷算签名

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
my-tv 央视频请求加密解析:你每换一次台,都在偷偷算签名

my-tv 央视频请求加密解析:你每换一次台,都在偷偷算签名

【免费下载链接】my-tv我的电视 电视直播软件,安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv

你在 my-tv 上按下换台的瞬间,应用已经在本地算好加密签名,再塞进发给央视频服务器的请求里。这套流程平时看不见,却是整个 App 能不能正常出画面的关键。

它到底在帮你解决什么?

如果你打开过抓包工具,会注意到一个现象:my-tv 并不是把频道地址直接甩给服务器,而是每次都带上一串 cKey、signature 这样的字段。

说白了,央视频这套接口是有"验货"环节的——请求里少一个字段、或者签名对不上,服务端就直接不给你流地址。Encryptor 负责的那块,就是替应用把这些"防伪凭证"算好的人。

背后是怎么跑起来的?📺

这块其实没你想的复杂,拆开看就三层。

第一层:算法为什么藏在 .so 里

Kotlin 这边的 Encryptor 其实是个空壳,init、encrypt、hash、hash2 四个方法全标了 external,真正干活的是 cpp 目录里按架构分好的 libnative.so。

你可以把它理解成:算法本体用 C 写死、编译进二进制库,Kotlin 只负责喊一声"帮我算"。这样即使有人反编译 APK,也只能看到一串调用,翻不到里面的具体运算。

第二层:cKey 和 signature 是怎么拼出来的

每次换台,YSP 先备齐几个原料:频道号 cnlid、当前时间、版本号、设备 guid、平台号,再随手造一个 10 位的 rand_str。

这些原料先喂给 encrypt 生成 cKey;同时把全部字段按固定顺序拼成一个查询串,交给 hash 得到 signature。换句话说,cKey 说明"我要看哪个台",signature 说明"这个请求没被中间人改过"。

// 换台请求里,这两个字段全靠 Encryptor 算出来 val cKey = encryptor.encrypt(cnlid, timeStr, appVer, guid, platform) val signature = encryptor.hash(按固定顺序拼好的字段串)

第三层:guid 和 rand_str 这两个"防伪"细节

guid 是应用生成的设备指纹,首次写入 SP 后一直复用,让服务器认得"这是同一台电视"。

而 rand_str 和 timeStr 每次请求都换新,作用就是防重放——有人就算截获了一次请求,隔段时间重发也会因为对不上被拒。

跟着走一遍

  1. 打开 my-tv,进到一个央视频频道。
  2. 按遥控器上的"下一频道",应用读到新的 cnlid。
  3. 本地调用 encrypt 和 hash,当场算出 cKey 与 signature。
  4. 连同 guid、rand_str 一起打包成 JSON 发给服务端。
  5. 验签通过,返回流地址,画面就出来了。

几个值得留意的细节🔒

  • 它并不是"密码锁"。单看 Encryptor 这个名字很容易联想到应用锁、存密码,但 SP 里实际只存了频道设置和设备 guid,没有任何密码字段——这层真正干的是给央视频请求做加密和签名。
  • 加密底座大概率是 OpenSSL。cpp 目录里躺着 libcrypto、libssl 的 .so 和一整套头文件,应用基本是拿现成的 OpenSSL 来算,而不是自己手写算法。
  • 两套 hash 各管一摊。hash 负责换台主请求的 signature,hash2 负责那串更短的鉴权签名,职责不混用。
  • 算法本体看不到源码。到底是哪种哈希、encrypt 走的哪套密钥,都封在二进制里,只能从调用处反推用途。

想看清这套签名到底怎么算的,与其读文章,不如把 YSP.kt 从头到尾捋一遍,那里是整套逻辑的总开关。

【免费下载链接】my-tv我的电视 电视直播软件,安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 9:55:32

shadPS4 故障排除完全实操指南:从闪退到黑屏的排查路线

shadPS4 故障排除完全实操指南:从闪退到黑屏的排查路线 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 shadPS4 是一款仍在快速迭代中的 …

作者头像 李华
网站建设 2026/9/2 9:55:26

基于BIC准则的高斯混合模型聚类簇数自动选择方法与实践

简介:本资源是一份面向机器学习初学者与实践者的轻量级工具脚本,聚焦高斯混合模型(GMM)聚类中关键的簇数自动选择问题。针对无监督学习中常因主观设定K值导致过拟合或欠拟合的痛点,该方案基于贝叶斯信息准则&#xff0…

作者头像 李华
网站建设 2026/9/2 9:53:49

Python构建钓鱼网站检测系统:从启发式特征到机器学习实战

简介:这是一套面向网络安全初学者与Python入门实践者的轻量级钓鱼网站检测工具,聚焦于基于URL和网页源码的启发式特征识别,解决实际场景中快速判别可疑网站的需求。资源包共3个文件,包含2个核心Python脚本(分别实现特征…

作者头像 李华
网站建设 2026/9/2 9:53:25

基于Flask与Celery的轻量级运维自动化平台实战设计与实现

简介:本资源是一个基于Flask框架构建的运维自动化管理平台完整源码工程,面向中高级Python开发者、DevOps工程师及企业运维团队,旨在解决重复性运维任务效率低、人工响应滞后、多环境配置难统一等核心痛点。平台集成资源监控、自动化部署、配置…

作者头像 李华
网站建设 2026/9/2 9:50:59

FPGA数字秒表设计全解析:从时钟分频到数码管驱动的硬件实现

简介:本资源是一套完整的FPGA数字秒表设计工程,面向电子类专业本科生、FPGA初学者及数字系统设计实践者,解决从计数器建模、状态机控制到数码管动态扫描显示的全流程实现问题。项目支持99分59.99秒高精度计时,集成启动/暂停/清零功…

作者头像 李华
网站建设 2026/9/2 9:50:58

单张4GB显卡如何跑70B大模型:AirLLM低显存推理实战指南

单张4GB显卡如何跑70B大模型:AirLLM低显存推理实战指南 【免费下载链接】airllm AirLLM 70B inference with single 4GB GPU 项目地址: https://gitcode.com/GitHub_Trending/ai/airllm 70B 参数的模型按全精度存放,权重就有 140GB 左右&#xff…

作者头像 李华