恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
my-tv加密签名全解析:3个模块如何守住电视直播的每一次换台请求
首页
资讯中心
/
my-tv加密签名全解析:3个模块如何守住电视直播的每一次换台请求
my-tv加密签名全解析:3个模块如何守住电视直播的每一次换台请求
发布时间:2026/9/2 14:53:21
my-tv加密签名全解析3个模块如何守住电视直播的每一次换台请求【免费下载链接】my-tv我的电视 电视直播软件安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv电视直播软件要拉流后端不会把地址白送。my-tv 每次换台都得跟服务端对暗号把频道 ID 和时间戳送进原生加密库算出一个 cKey再把十几个参数拼起来做一次哈希得到 signature两个值少一个流就拉不下来。与此同时你调过频道排序、开过开机自启——这些偏好也不能每次启动都丢。my-tv 用三块拼出了这条链路JNI 加密层负责签名和密钥生成SP 持久层负责记住你的选择设置界面负责一键切换。整个链路代码量不大但每一环都卡得比较紧。一个 19 行的 Kotlin 类把密码学运算全丢给 .soEncryptor.kt 全文只有 19 行四个方法全是external声明没有任何 Java 侧的算法实现class Encryptor { external fun init(context: Context) external fun encrypt(t: String, e: String, r: String, n: String, i: String): String external fun hash(data: ByteArray): ByteArray? external fun hash2(data: ByteArray): ByteArray? companion object { init { System.loadLibrary(native) } } }loadLibrary(native)加载的是按架构打包的 libnative.so里面集成了 OpenSSL 原生实现。白话说Java 层只负责喊一嗓子真正的 AES 加密和哈希在 native 层跑完逆向门槛比直接调MessageDigest高不少。encrypt吃五个参数吐一段密文当 cKeyhash和hash2分别对应换台签名和登录鉴权两种场景。换台时暗号怎么拼cKey 和 signature 的生成顺序YSP.kt 是调用方switch()方法就是你每次按遥控器换台时跑的那段逻辑cKey encryptor.encrypt(cnlid, timeStr, appVer, guid, platform) signature getSignature()getSignature()把 cKey、guid、rand_str 等十几个字段按固定顺序拼成一段 query string交给hash()做摘要再转 hex。服务端拿到同样的参数用同样的算法算一遍对得上才返回流地址。时间戳参与加密意味着重放攻击直接失效——同一个 cKey 过期就废。guid 是设备级标识首次启动时生成一个 18 位字符串写进 SP之后一直复用。服务端凭它认出还是同一台电视不用每次重新走完整鉴权。七行 getter/setter 管住所有用户偏好SP.kt 是一个 Kotlinobject内部只持有一个 SharedPreferences 实例对外暴露七个属性每个都是这种结构var channelReversal: Boolean get() sp.getBoolean(KEY_CHANNEL_REVERSAL, false) set(value) sp.edit().putBoolean(KEY_CHANNEL_REVERSAL, value).apply()频道反转、数字选台、时间显示、开机自启、网格布局、频道位置、guid——全在这一个文件里。set里直接apply()异步落盘界面一改磁盘就跟着变不需要额外的同步或回调。文件名叫 MainActivity代码注释里标了 TODO 要改个更有意义的名字目前够用但配置项再多就显得挤了。遥控器上就能改的三项设置SettingFragment.kt 把四个 Switch 控件和 SP 属性一一绑定操作路径很简单遥控器按菜单键打开设置面板看到频道反转、频道号、时间显示、开机自启四个开关按确认键切换某个开关比如打开开机自启——SP.bootStartup true立即执行apply()后台写盘重启电视BootReceiver.kt 读到bootStartup为 true自动拉起 my-tv不用掏遥控器每次切换后还会调settingDelayHide()延迟收起面板防止遥控器连按误触。几个工程取舍native 库按架构分包cpp/ 下 arm64-v8a 和 armeabi-v7a 各放一套 .soGradle 构建时自动选对应架构运行时不用判断⚡cKey 每次换台重算时间戳参与加密重放直接失效代价是每次换台都走一次 JNI 调用在低端电视盒上可能有毫秒级延迟guid 只生成一次设备重启不换 ID服务端可做设备级缓存但换设备等于换人偏好带不过去SP 文件名是 MainActivity所有配置挤在一个文件里扩展性一般代码里也留了 TODO可以接着做的方向加密参数收敛当前encrypt的五个参数是明文传入 native 层的可以在 Encryptor.kt 里加一层密钥派生减少参数在 Java 层的暴露面配置云端同步SP.kt 目前只写本地加一层网络同步就能在换电视时把频道偏好带过去ApiClient.kt 里已有请求基础设施可以复用签名常量抽配置YSP.kt 里encryptVer、cmd、platform全是硬编码后端升级协议时改起来要翻好几个地方抽成配置类会更稳my-tv 的加密链路不长——一个 19 行的 Kotlin 类加一个 .so 文件撑起了换台签名的全部安全需求配上 SP 的七行 getter/setter 把用户偏好钉在磁盘上。想深入看签名拼装的完整字段直接打开 YSP.kt 的switch()方法十几行代码把整个对暗号过程写得明明白白。【免费下载链接】my-tv我的电视 电视直播软件安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考