找回密码
 注册需人工审核(节假日除外)
搜索
查看: 270|回复: 9

咸阳电视台JS源码求助

[复制链接]

签到天数: 6 天

[LV.2]登堂入室

发表于 2024-12-24 23:48:30 | 显示全部楼层 |阅读模式
悬赏10TV币已解决
本帖最后由 guoma 于 2024-12-25 00:38 编辑

js源码:
  1. <script type="text/javascript" src="http://www.xybtv.com/js/jquery-1.11.1.min.js"></script>
  2. <script type="text/javascript" src="http://www.xybtv.com/js/pc/crypto-js.js"></script>
  3. <script>
  4. vid = 'xyzh';//location.href.split('html?id=')[1];;
  5. n=[];
  6. n['xyzh'] = 157309; //咸阳综合
  7. n['xygg'] = 157314; //咸阳公共

  8. secretKey = 'ji0e3G8RR/JrBULhyaJUdg==';
  9. $.ajax({
  10.             type:"get",
  11.             url:"http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id="+n[vid],
  12.             dataType:"jsonp",
  13.             success:function(data){
  14.                     address = data.address;
  15.                 address= decryptByAES(data.address,secretKey)
  16.                     location.href = "http://dsk.cc/p/video.html?id=http:"+address;
  17.                     }
  18.      })
  19. function decryptByAES(cipherText,keyInBase64Str) {
  20.     let key = CryptoJS.enc.Base64.parse(keyInBase64Str);
  21.     let decrypted = CryptoJS.AES.decrypt(cipherText, key, {
  22.           mode: CryptoJS.mode.ECB,
  23.         });
  24.     return decrypted.toString(CryptoJS.enc.Utf8);
  25. }
  26. </script>
复制代码

以上源码在本地运行可以,传到网络上获取不到完整数据,播放地址?号后的数据丢失,请高手指教:什么原因?如何解决?
php代码可获得AES-256-ECB加密数据,不知如何解密?并请高手完善:
  1. <?php
  2. $id = isset($_GET['id'])?$_GET['id']:'xyzh';
  3. $n=[
  4.    'xyzh'=> 157309, //咸阳综合
  5.    'xygg'=> 157314, //咸阳公共
  6.    ];
  7. $d = file_get_contents("http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=".$n[$id]);
  8. $address =  json_decode(str_replace(["(", ")"], "",$d))->address;
  9. echo $address;
  10. ?>
复制代码


人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 374 天

[LV.9]已臻大成

发表于 2024-12-24 23:48:31 | 显示全部楼层
  1. <?php
  2. $id = isset($_GET['id'])?$_GET['id']:'xyzh';
  3. $n=[
  4.    'xyzh'=> 157309, //咸阳综合
  5.    'xygg'=> 157314, //咸阳公共
  6.    ];
  7. header("Location: https:".openssl_decrypt(json_decode(str_replace(["(", ")"], "",file_get_contents("http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=".$n[$id])))->address,"AES-128-ECB",base64_decode('ji0e3G8RR/JrBULhyaJUdg=='),0),true,302);
  8. ?>
复制代码

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 2 天

[LV.1]初学乍练

发表于 2024-12-24 23:58:19 | 显示全部楼层
以下是google AI 最新的模型给出的答案


  1. 这段 PHP 代码看起来确实是用于获取一个 API 返回的加密数据,然后尝试解码并输出地址信息。但是,它实际上并没有进行 AES-256-ECB 加密。 它只是从一个 URL 获取 JSON 数据,然后提取其中的 address 字段。
  2. 让我来分解一下:
  3. $id = isset($_GET['id'])?$_GET['id']:'xyzh';
  4. 这行代码从 URL 参数中获取 id 的值。如果 URL 中没有 id 参数,则默认使用 'xyzh'。
  5. $n = [...]
  6. 这定义了一个关联数组 $n,将字符串 ID 映射到数字 ID。
  7. $d = file_get_contents("http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=".$n[$id]);
  8. 这行代码的关键部分。它使用 file_get_contents() 函数从指定的 URL 获取内容。
  9. URL 包含一个参数 id,其值来自数组 $n,对应于 $id 的值。
  10. 重点:这里只是从 API 获取数据,没有加密操作。
  11. $address = json_decode(str_replace(["(", ")"], "",$d))->address;
  12. str_replace(["(", ")"], "",$d): 这段代码把 API 返回的数据中的左右括号 ( 和 ) 去掉。之所以需要这么做,是因为有些 API 返回的 JSON 数据可能会被包装在括号里,导致 json_decode 失败。
  13. json_decode(...): 这行代码使用 json_decode() 函数将 JSON 格式的字符串 $d 解析为 PHP 对象。
  14. ->address: 这行代码从解析后的 PHP 对象中提取 address 属性的值。
  15. echo $address;
  16. 这行代码将提取到的 address 值输出到页面。
  17. 没有加密,只有 API 数据获取和 JSON 解析
  18. 所以,你的代码并没有涉及到任何 AES-256-ECB 加密。它只是从一个 API 获取 JSON 数据,提取其中的 address 字段,并输出。
  19. 如果需要解密 AES-256-ECB 加密的数据,你需要:
  20. 获取密钥 (key) 和初始化向量 (IV): 通常,加密数据的解密需要一个密钥和一个初始化向量(IV)。这些信息必须与加密时使用的一致。
  21. 确定加密数据: 你需要明确哪个数据是经过 AES-256-ECB 加密的。
  22. 使用解密函数: PHP 提供了 openssl_decrypt() 函数,可以用来解密数据。
  23. 示例解密代码(假设数据已 Base64 编码,并且你已知密钥和 IV):
  24. <?php
  25. $encrypted_data_base64 = "YOUR_ENCRYPTED_DATA_IN_BASE64"; //  替换为你实际的加密数据
  26. $key = "YOUR_AES_KEY_HERE"; // 替换为你的AES密钥
  27. //$iv = "YOUR_IV_HERE";   // ECB模式不需要IV

  28. $encrypted_data = base64_decode($encrypted_data_base64);

  29. // ECB模式不需要IV
  30. $decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA );

  31. if ($decrypted_data !== false) {
  32.     echo "Decrypted Data: " . $decrypted_data;
  33. } else {
  34.     echo "Error decrypting data.";
  35. }
  36. ?>
  37. Use code with caution.
  38. PHP
  39. 请注意:
  40. ECB 模式的弱点: AES-256-ECB 模式由于其自身的特性,容易遭受攻击,尤其是在加密结构化的数据时。在实际开发中,请尽量避免使用 ECB 模式,考虑使用更安全的模式如 CBC、CTR 或 GCM。
  41. 密钥安全: 请务必妥善保管密钥,不要将密钥直接嵌入代码或泄露给未经授权的人员。
  42. 错误处理: 在实际代码中,你应该添加适当的错误处理,例如检查 openssl_decrypt() 的返回值,并处理解密失败的情况。
  43. 总结:
  44. 你的原始 PHP 代码并没有进行 AES 加密或解密。如果你需要解密 AES 加密的数据,你需要提供正确的密钥、加密数据,并使用 openssl_decrypt() 函数。请确保你了解加密模式(ECB 的不安全性)并且妥善保管你的密钥。
复制代码


点评

$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA );解密不了。  详情 回复 发表于 2024-12-25 00:04

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 6 天

[LV.2]登堂入室

 楼主| 发表于 2024-12-25 00:04:49 | 显示全部楼层
k7y 发表于 2024-12-24 23:58
以下是google AI 最新的模型给出的答案

$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA );解密不了。

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 2 天

[LV.1]初学乍练

发表于 2024-12-25 00:21:09 | 显示全部楼层
  1. 问题分析:
  2. JavaScript 部分:
  3. 本地运行成功,网络运行失败: 这通常是由于跨域问题引起的。你本地运行时,直接打开 HTML 文件,没有跨域问题。但是,当你将 HTML 文件上传到服务器上后,JavaScript 代码会尝试从 api.juyun.tv 这个不同的域名获取数据,浏览器会阻止这种跨域请求,从而导致无法获取数据。
  4. 播放地址 ? 号后数据丢失: 这是因为 location.href 会对 URL 中的特殊字符(例如 ? )进行编码,这会导致部分数据丢失。
  5. PHP 部分:
  6. 可以获取 JSON 数据: 你使用 file_get_contents 从 API 获取 JSON 数据是正确的。
  7. JSON 解析和数据提取: 你使用 json_decode 和对象属性访问来提取 address 是正确的。
  8. openssl_decrypt 解密失败: 这是因为,正如我们之前讨论的,API 返回的 address 数据本身是经过 AES 加密的,在 客户端(JavaScript) 使用 CryptoJS.AES.decrypt 解密,而不是在 服务端(PHP) 解密。
  9. JavaScript 代码中解密逻辑正确:
  10. decryptByAES 函数使用 CryptoJS 的逻辑是正确的,可以解密 address 数据。
  11. 解决方案:
  12. 1. 解决 JavaScript 跨域问题:
  13. JSONP: 你在代码中使用了 dataType:"jsonp",这意味着你已经使用了 JSONP 来解决跨域问题。JSONP 的原理是利用 <script> 标签的 src 属性不受同源策略限制的特性,通过动态创建 <script> 标签来跨域获取数据。
  14. * 确保 API 支持 JSONP: 检查 http://api.juyun.tv/juxian/api/is_pay_tv.jsp 接口是否支持 JSONP 回调,并且在响应中返回正确的 JSONP 数据格式(通常是 callback({"data":"value"}) 格式)。你可以尝试在浏览器直接访问该接口,看看返回的数据格式。
  15. * 设置 callback 参数: 如果 API 需要一个特定的回调函数名作为参数,可以在 url 中设置 callback 参数: url:"http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id="+n[vid] + "&callback=myCallback", 同时修改 success 回调函数。
  16. $.ajax({
  17.        type:"get",
  18.        url:"http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id="+n[vid] + "&callback=myCallback",
  19.        dataType:"jsonp",
  20.         jsonpCallback: 'myCallback',
  21.        success:function(data){
  22.            address = data.address;
  23.            address= decryptByAES(address,secretKey)
  24.            location.href = "http://dsk.cc/p/video.html?id=http:"+address;
  25.        }
  26.    });
  27. Use code with caution.
  28. JavaScript
  29. 2. 解决 JavaScript 播放地址 ? 号后数据丢失问题:
  30. 使用 encodeURIComponent(): 使用 encodeURIComponent() 对 address 进行编码,这样 ? 等特殊字符就不会被浏览器转义,从而导致数据丢失。
  31. location.href = "http://dsk.cc/p/video.html?id=http:"+encodeURIComponent(address);
  32. Use code with caution.
  33. JavaScript
  34. 3. PHP 代码中解密逻辑:
  35. 移除 openssl_decrypt: openssl_decrypt 解密应该在客户端(JavaScript)进行,你已经在 JavaScript 代码中正确地实现了 AES 解密。 PHP 代码只需要获取原始的 address 数据。
  36. * 增加 id 参数判断: 在获取数据之前判断 id 的有效性,避免错误的 id 导致错误,或未定义错误。
  37. <?php
  38. $id = isset($_GET['id']) ? $_GET['id'] : 'xyzh';
  39. $n = [
  40.    'xyzh' => 157309, // 咸阳综合
  41.    'xygg' => 157314, // 咸阳公共
  42. ];

  43. if (isset($n[$id])) {
  44.     $url = "http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=" . $n[$id];
  45.     $d = file_get_contents($url);
  46.     if ($d !== false) {
  47.        $data = json_decode(str_replace(["(", ")"], "", $d), true);
  48.        if (isset($data['address'])) {
  49.           $address = $data['address'];
  50.            echo $address;
  51.         } else {
  52.              echo "Error: address data not found";
  53.         }
  54.     } else {
  55.           echo "Error: Failed to fetch data from API";
  56.     }
  57. } else {
  58.     echo "Error: Invalid ID provided";
  59. }
  60. ?>
  61. Use code with caution.
  62. PHP
  63. 修改后的代码:
  64. JavaScript:
  65. <script type="text/javascript" src="http://www.xybtv.com/js/jquery-1.11.1.min.js"></script>
  66. <script type="text/javascript" src="http://www.xybtv.com/js/pc/crypto-js.js"></script>
  67. <script>
  68. vid = 'xyzh';//location.href.split('html?id=')[1];;
  69. n=[];
  70. n['xyzh'] = 157309; //咸阳综合
  71. n['xygg'] = 157314; //咸阳公共

  72. secretKey = 'ji0e3G8RR/JrBULhyaJUdg==';
  73. $.ajax({
  74.     type:"get",
  75.     url:"http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id="+n[vid] + "&callback=myCallback",
  76.     dataType:"jsonp",
  77.     jsonpCallback: 'myCallback',
  78.     success:function(data){
  79.         address = data.address;
  80.         address= decryptByAES(address,secretKey)
  81.         location.href = "http://dsk.cc/p/video.html?id=http:"+encodeURIComponent(address);
  82.     }
  83. });
  84. function decryptByAES(cipherText,keyInBase64Str) {
  85.     let key = CryptoJS.enc.Base64.parse(keyInBase64Str);
  86.     let decrypted = CryptoJS.AES.decrypt(cipherText, key, {
  87.           mode: CryptoJS.mode.ECB,
  88.         });
  89.     return decrypted.toString(CryptoJS.enc.Utf8);
  90. }
  91. </script>
  92. Use code with caution.
  93. Html
  94. PHP:
  95. <?php
  96. $id = isset($_GET['id']) ? $_GET['id'] : 'xyzh';
  97. $n = [
  98.    'xyzh' => 157309, // 咸阳综合
  99.    'xygg' => 157314, // 咸阳公共
  100. ];

  101. if (isset($n[$id])) {
  102.     $url = "http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=" . $n[$id];
  103.     $d = file_get_contents($url);
  104.     if ($d !== false) {
  105.        $data = json_decode(str_replace(["(", ")"], "", $d), true);
  106.        if (isset($data['address'])) {
  107.           $address = $data['address'];
  108.            echo $address;
  109.         } else {
  110.              echo "Error: address data not found";
  111.         }
  112.     } else {
  113.           echo "Error: Failed to fetch data from API";
  114.     }
  115. } else {
  116.     echo "Error: Invalid ID provided";
  117. }
  118. ?>
  119. Use code with caution.
  120. PHP
  121. 总结:
  122. JavaScript:
  123. 确保使用 JSONP 来处理跨域问题。
  124. 使用 encodeURIComponent() 对 URL 参数进行编码。
  125. PHP:
  126. PHP 代码仅用于获取未解密的原始 address 数据。
  127. 增加 id 参数判断,防止错误。
复制代码


人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 6 天

[LV.2]登堂入室

 楼主| 发表于 2024-12-25 00:34:49 | 显示全部楼层
谢谢kof97zip,原来是我将解密模式搞错了。

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 308 天

[LV.8]自成一派

发表于 2024-12-25 00:44:10 | 显示全部楼层
  1. <?php
  2. $id = isset($_GET['id']) ? $_GET['id'] : 'xyzh';
  3. $n = [
  4.     'xyzh' => 157309, // 咸阳综合
  5.         'xygg' => 157314, // 咸阳公共
  6. ];

  7. // 获取数据
  8. $d = file_get_contents("http://api.juyun.tv/juxian/api/is_pay_tv.jsp?id=" . $n[$id]);
  9. $address = json_decode(str_replace(["(", ")"], "", $d))->address;

  10. // 解密函数
  11. function decryptByAES($cipherText, $keyInBase64Str) {
  12.     $key = base64_decode($keyInBase64Str); // 将 Base64 编码的密钥解码
  13.     $cipherText = base64_decode($cipherText); // 解码密文
  14.     $decrypted = openssl_decrypt($cipherText, 'AES-128-ECB', $key, OPENSSL_RAW_DATA); // 使用 AES-128-ECB 解密
  15.     return $decrypted;
  16. }

  17. $secretKey = 'ji0e3G8RR/JrBULhyaJUdg=='; // 密钥
  18. $decryptedAddress = decryptByAES($address, $secretKey); // 解密地址

  19. // 调试信息
  20. if ($decryptedAddress === false) {
  21.     echo "解密失败,可能是密钥或密文有误。";
  22. } else {
  23.     header("Location: " . $decryptedAddress); // 重定向到解密后的地址 exit(); // 确保脚本停止执行
  24. }
  25. ?>
复制代码


这是AI给的代码,可以解密,但是无法播放

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 1 天

[LV.1]初学乍练

发表于 2024-12-25 06:52:37 来自手机 | 显示全部楼层
学习学习学习学习

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 352 天

[LV.8]自成一派

发表于 2024-12-25 09:47:46 | 显示全部楼层
本帖有解密高手,mark备份

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 115 天

[LV.6]渐入佳境

发表于 2024-12-25 12:17:49 | 显示全部楼层
不懂帮顶,期待大佬的新作品

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

Archiver|手机版|小黑屋|IPTV论坛 | 管理员邮箱:a@8494.net

本站以兴趣爱好为宗旨,非经营性质,不以任何形式收取任何费用。IPTV论坛没有任何官方Q群,V群,T群,禁止留任何联系方式,请配合。

免责声明:本站上述内容来自网络,不得用于商业或非法用途,您必须在下载后24小时内,从设备中删除,否则后果自负。如内容侵犯您的版权、著作权,请联系我,第一时间处理。

GMT+8, 2025-1-31 08:13 , Processed in 0.106988 second(s), 18 queries .

IPTV论坛 创建于 2023年5月1日

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