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

内蒙古电视台代理,js代码

[复制链接]

签到天数: 85 天

[LV.6]渐入佳境

发表于 2024-6-24 18:45:26 | 显示全部楼层 |阅读模式
悬赏5TV币已解决
内蒙古电视台代理,js代码书写的。加密形式是:XXTEA加密算法。大神帮我看下它的加密形式如何用php代码来书写,谢谢了。
<script type="text/javascript" src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="xxtea.js"></script>
<script>
var idParam = location.href.split('?id=');
if (idParam.length > 1) {var id = idParam[1].split('&')[0];} else {var id = 'nmgws';}

var channel = [];
channel['nmgws'] = 125; //古内蒙古卫视
channel['nmgmyws'] = 126; //内蒙古蒙古语卫视
channel['nmgxwzh'] = 127; //内蒙古新闻综合
channel['nmgjjsh'] = 128; //内蒙古经济生活
channel['nmgse'] = 129; //内蒙古少儿频道
channel['nmgwtyl'] = 130; //内蒙古文体娱乐
channel['nmgnm'] = 131; //内蒙古农牧频道
channel['nmgmgwh'] = 132; //内蒙古蒙古语文化
var parms = {
    "size": 100,
    "type": 1
};
var encrydata = XXTEA.encryptToString(JSON.stringify(parms), "5b28bae827e651b3");
var url = 'https://api-bt.nmtv.cn/broadcast/list';
$.ajax({
    contentType: "application/json",
    type: 'POST',
    url: url,
    data: encrydata,
    success: function(res) {
        var shuju = XXTEA.decryptToString(res, "5b28bae827e651b3");
        var obj = JSON.parse(shuju);
        var json = (obj.data);

        var cid = channel[id];
        for (var Index in json) {
            var pid = json[Index].data.id;
            if (pid == cid) {
                var m3u8 = json[Index].data.streamUrl;
                //console.log(m3u8);
                location.href = m3u8;
            }

        }
    }
});
</script>

最佳答案

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 6 天

[LV.2]登堂入室

发表于 2024-6-24 18:45:27 | 显示全部楼层
本帖最后由 guoma 于 2024-7-2 21:51 编辑
  1. <?php
  2. error_reporting(0);
  3. $id = isset($_GET['id'])?$_GET['id']:'nmws';
  4. $n = [
  5.      'nmws' => 125, //古内蒙古卫视
  6.      'nmmyws' => 126, //内蒙古蒙古语卫视
  7.      'nmxwzh' => 127, //内蒙古新闻综合
  8.      'nmjjsh' => 128, //内蒙古经济生活
  9.      'nmse' => 129, //内蒙古少儿频道
  10.      'nmwtyl' => 130, //内蒙古文体娱乐
  11.      'nmnm' => 131, //内蒙古农牧频道
  12.      'nmwh' => 132, //内蒙古蒙古语文化
  13.      ];

  14. $ch = curl_init('https://api-bt.nmtv.cn/broadcast/list?size=100&type=1');
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  16. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  18. $res = curl_exec($ch);
  19. curl_close($ch);
  20. $res = str_replace('"','',$res);
  21. $str = xxtea_decrypt(base64_decode($res), "5b28bae827e651b3");
  22. $json = json_decode($str, 1);
  23. foreach ($json['data'] as $v) {
  24.         if ($v['data']['id'] == $n[$id]) {
  25.            $m3u8 = $v['data']['streamUrl'];
  26.            header("Location: $m3u8");
  27.            //echo $m3u8;
  28.            exit;
  29.            }
  30.         }

  31. function xxtea_encrypt($str, $key) {
  32.         if ($str == "") return "";
  33.         $v = str2long($str, true);
  34.         $k = str2long($key, false);
  35.         if (count($k) < 4) {
  36.                 for ($i = count($k); $i < 4; $i++) {
  37.                         $k[$i] = 0;
  38.                 }
  39.         }
  40.         $n = count($v) - 1;
  41.         $z = $v[$n];
  42.         $y = $v[0];
  43.         $delta = 0x9E3779B9;
  44.         $q = floor(6 + 52 / ($n + 1));
  45.         $sum = 0;
  46.         while (0 < $q--) {
  47.                 $sum = int32($sum + $delta);
  48.                 $e = $sum >> 2 & 3;
  49.                 for ($p = 0; $p < $n; $p++) {
  50.                         $y = $v[$p + 1];
  51.                         $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
  52.                         $z = $v[$p] = int32($v[$p] + $mx);
  53.                 }
  54.                 $y = $v[0];
  55.                 $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
  56.                 $z = $v[$n] = int32($v[$n] + $mx);
  57.         }
  58.         return long2str($v, false);
  59. }
  60. function xxtea_decrypt($str, $key) {
  61.         if ($str == "") {
  62.                 return "";
  63.         }
  64.         $v = str2long($str, false);
  65.         $k = str2long($key, false);
  66.         if (count($k) < 4) {
  67.                 for ($i = count($k); $i < 4; $i++) {
  68.                         $k[$i] = 0;
  69.                 }
  70.         }
  71.         $n = count($v) - 1;
  72.         $z = $v[$n];
  73.         $y = $v[0];
  74.         $delta = 0x9E3779B9;
  75.         $q = floor(6 + 52 / ($n + 1));
  76.         $sum = int32($q * $delta);
  77.         while ($sum != 0) {
  78.                 $e = $sum >> 2 & 3;
  79.                 for ($p = $n; $p > 0; $p--) {
  80.                         $z = $v[$p - 1];
  81.                         $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
  82.                         $y = $v[$p] = int32($v[$p] - $mx);
  83.                 }
  84.                 $z = $v[$n];
  85.                 $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
  86.                 $y = $v[0] = int32($v[0] - $mx);
  87.                 $sum = int32($sum - $delta);
  88.         }
  89.         return long2str($v, true);
  90. }
  91. function int32($n) {
  92.         while ($n >= 2147483648) $n -= 4294967296;
  93.         while ($n <= -2147483649) $n += 4294967296;
  94.         return (int)$n;
  95. }
  96. function str2long($s, $w) {
  97.         $v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));
  98.         $v = array_values($v);
  99.         if ($w) {
  100.                 $v[count($v)] = strlen($s);
  101.         }
  102.         return $v;
  103. }
  104. function long2str($v, $w) {
  105.         $len = count($v);
  106.         $n = ($len - 1) << 2;
  107.         if ($w) {
  108.                 $m = $v[$len - 1];
  109.                 if (($m < $n - 3) || ($m > $n))
  110.                           return false;
  111.                 $n = $m;
  112.         }
  113.         $s = array();
  114.         for ($i = 0; $i < $len; $i++) {
  115.                 $s[$i] = pack("V", $v[$i]);
  116.         }
  117.         if ($w) {
  118.                 return substr(join('', $s), 0, $n);
  119.         } else {
  120.                 return join('', $s);
  121.         }
  122. }
  123. ?>
复制代码

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 50 天

[LV.5]略有小成

发表于 2024-6-24 20:15:44 | 显示全部楼层
这是加密所有函数:
(function (global) {
    'use strict';

    var arrayLikeObjectArgumentsEnabled = true;

    try {
        String.fromCharCode.apply(String, new Uint8Array([1, 2]));
    }
    catch (e) {
        arrayLikeObjectArgumentsEnabled = false;
        Object.defineProperty(Array.prototype, 'subarray', { value: Array.prototype.slice });
    }

    var DELTA = 0x9E3779B9;

    function toUint8Array(v, includeLength) {
        var length = v.length;
        var n = length << 2;
        if (includeLength) {
            var m = v[length - 1];
            n -= 4;
            if ((m < n - 3) || (m > n)) {
                return null;
            }
            n = m;
        }
        var bytes = new Uint8Array(n);
        for (var i = 0; i < n; ++i) {
            bytes[i] = v[i >> 2] >> ((i & 3) << 3);
        }
        return bytes;
    }

    function toUint32Array(bytes, includeLength) {
        var length = bytes.length;
        var n = length >> 2;
        if ((length & 3) !== 0) {
            ++n;
        }
        var v;
        if (includeLength) {
            v = new Uint32Array(n + 1);
            v[n] = length;
        }
        else {
            v = new Uint32Array(n);
        }
        for (var i = 0; i < length; ++i) {
            v[i >> 2] |= bytes[i] << ((i & 3) << 3);
        }
        return v;
    }

    function int32(i) {
        return i & 0xFFFFFFFF;
    }

    function mx(sum, y, z, p, e, k) {
        return ((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (k[p & 3 ^ e] ^ z));
    }

    function fixk(k) {
        if (k.length < 16) {
            var key = new Uint8Array(16);
            key.set(k);
            k = key;
        }
        return k;
    }

    function encryptUint32Array(v, k) {
        var length = v.length;
        var n = length - 1;
        var y, z, sum, e, p, q;
        z = v[n];
        sum = 0;
        for (q = Math.floor(6 + 52 / length) | 0; q > 0; --q) {
            sum = int32(sum + DELTA);
            e = sum >>> 2 & 3;
            for (p = 0; p < n; ++p) {
                y = v[p + 1];
                z = v[p] = int32(v[p] + mx(sum, y, z, p, e, k));
            }
            y = v[0];
            z = v[n] = int32(v[n] + mx(sum, y, z, n, e, k));
        }
        return v;
    }

    function decryptUint32Array(v, k) {
        var length = v.length;
        var n = length - 1;
        var y, z, sum, e, p, q;
        y = v[0];
        q = Math.floor(6 + 52 / length);
        for (sum = int32(q * DELTA); sum !== 0; sum = int32(sum - DELTA)) {
            e = sum >>> 2 & 3;
            for (p = n; p > 0; --p) {
                z = v[p - 1];
                y = v[p] = int32(v[p] - mx(sum, y, z, p, e, k));
            }
            z = v[n];
            y = v[0] = int32(v[0] - mx(sum, y, z, 0, e, k));
        }
        return v;
    }

    function toBytes(str) {
        var n = str.length;
        // A single code unit uses at most 3 bytes.
        // Two code units at most 4.
        var bytes = new Uint8Array(n * 3);
        var length = 0;
        for (var i = 0; i < n; i++) {
            var codeUnit = str.charCodeAt(i);
            if (codeUnit < 0x80) {
                bytes[length++] = codeUnit;
            }
            else if (codeUnit < 0x800) {
                bytes[length++] = 0xC0 | (codeUnit >> 6);
                bytes[length++] = 0x80 | (codeUnit & 0x3F);
            }
            else if (codeUnit < 0xD800 || codeUnit > 0xDFFF) {
                bytes[length++] = 0xE0 | (codeUnit >> 12);
                bytes[length++] = 0x80 | ((codeUnit >> 6) & 0x3F);
                bytes[length++] = 0x80 | (codeUnit & 0x3F);
            }
            else {
                if (i + 1 < n) {
                    var nextCodeUnit = str.charCodeAt(i + 1);
                    if (codeUnit < 0xDC00 && 0xDC00 <= nextCodeUnit && nextCodeUnit <= 0xDFFF) {
                        var rune = (((codeUnit & 0x03FF) << 10) | (nextCodeUnit & 0x03FF)) + 0x010000;
                        bytes[length++] = 0xF0 | (rune >> 18);
                        bytes[length++] = 0x80 | ((rune >> 12) & 0x3F);
                        bytes[length++] = 0x80 | ((rune >> 6) & 0x3F);
                        bytes[length++] = 0x80 | (rune & 0x3F);
                        i++;
                        continue;
                    }
                }
                throw new Error('Malformed string');
            }
        }
        return bytes.subarray(0, length);
    }

    function toShortString(bytes, n) {
        var charCodes = new Array(n);
        var i = 0, off = 0;
        for (var len = bytes.length; i < n && off < len; i++) {
            var unit = bytes[off++];
            switch (unit >> 4) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                    charCodes[i] = unit;
                    break;
                case 12:
                case 13:
                    if (off < len) {
                        charCodes[i] = ((unit & 0x1F) << 6) |
                            (bytes[off++] & 0x3F);
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                case 14:
                    if (off + 1 < len) {
                        charCodes[i] = ((unit & 0x0F) << 12) |
                            ((bytes[off++] & 0x3F) << 6) |
                            (bytes[off++] & 0x3F);
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                case 15:
                    if (off + 2 < len) {
                        var rune = (((unit & 0x07) << 18) |
                            ((bytes[off++] & 0x3F) << 12) |
                            ((bytes[off++] & 0x3F) << 6) |
                            (bytes[off++] & 0x3F)) - 0x10000;
                        if (0 <= rune && rune <= 0xFFFFF) {
                            charCodes[i++] = (((rune >> 10) & 0x03FF) | 0xD800);
                            charCodes[i] = ((rune & 0x03FF) | 0xDC00);
                        }
                        else {
                            throw new Error('Character outside valid Unicode range: 0x' + rune.toString(16));
                        }
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                default:
                    throw new Error('Bad UTF-8 encoding 0x' + unit.toString(16));
            }
        }
        if (i < n) {
            charCodes.length = i;
        }
        return String.fromCharCode.apply(String, charCodes);
    }

    function toLongString(bytes, n) {
        var buf = [];
        var charCodes = new Array(0x8000);
        var i = 0, off = 0;
        for (var len = bytes.length; i < n && off < len; i++) {
            var unit = bytes[off++];
            switch (unit >> 4) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                    charCodes[i] = unit;
                    break;
                case 12:
                case 13:
                    if (off < len) {
                        charCodes[i] = ((unit & 0x1F) << 6) |
                            (bytes[off++] & 0x3F);
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                case 14:
                    if (off + 1 < len) {
                        charCodes[i] = ((unit & 0x0F) << 12) |
                            ((bytes[off++] & 0x3F) << 6) |
                            (bytes[off++] & 0x3F);
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                case 15:
                    if (off + 2 < len) {
                        var rune = (((unit & 0x07) << 18) |
                            ((bytes[off++] & 0x3F) << 12) |
                            ((bytes[off++] & 0x3F) << 6) |
                            (bytes[off++] & 0x3F)) - 0x10000;
                        if (0 <= rune && rune <= 0xFFFFF) {
                            charCodes[i++] = (((rune >> 10) & 0x03FF) | 0xD800);
                            charCodes[i] = ((rune & 0x03FF) | 0xDC00);
                        }
                        else {
                            throw new Error('Character outside valid Unicode range: 0x' + rune.toString(16));
                        }
                    }
                    else {
                        throw new Error('Unfinished UTF-8 octet sequence');
                    }
                    break;
                default:
                    throw new Error('Bad UTF-8 encoding 0x' + unit.toString(16));
            }
            if (i >= 0x7FFF - 1) {
                var size = i + 1;
                charCodes.length = size;
                buf.push(String.fromCharCode.apply(String, charCodes));
                n -= size;
                i = -1;
            }
        }
        if (i > 0) {
            charCodes.length = i;
            buf.push(String.fromCharCode.apply(String, charCodes));
        }
        return buf.join('');
    }

    function toString(bytes) {
        if (!bytes) return '密钥错误';
        var n = bytes.length;
        if (n === 0) return '';
        return ((n < 0x7FFF) ?
            toShortString(bytes, n) :
            toLongString(bytes, n));
    }

    function toArray(bytes) {
        var n = bytes.length;
        var a = new Array(bytes.length);
        for (var i = 0; i < n; ++i) {
            a[i] = bytes[i];
        }
        return a;
    }

    function toAsciiString(bytes) {
        var n = bytes.length;
        if (n === 0) return '';
        var charCodes = (arrayLikeObjectArgumentsEnabled ? bytes : toArray(bytes));
        if (n < 0xFFFF) {
            return String.fromCharCode.apply(String, charCodes);
        }
        var remain = n & 0x7FFF;
        var count = n >> 15;
        var a = new Array(remain ? count + 1 : count);
        for (var i = 0; i < count; ++i) {
            a[i] = String.fromCharCode.apply(String, charCodes.subarray(i << 15, (i + 1) << 15));
        }
        if (remain) {
            a[count] = String.fromCharCode.apply(String, charCodes.subarray(count << 15, n));
        }
        return a.join('');
    }

    function base64ToBytes(base64) {
        var s = window.atob(base64);
        var n = s.length;
        var bytes = new Uint8Array(n);
        for (var i = 0; i < n; i++) {
            bytes[i] = s.charCodeAt(i);
        }
        return bytes;
    }

    function encrypt(data, key) {
        if (typeof data === 'string') data = toBytes(data);
        if (typeof key === 'string') key = toBytes(key);
        if (data === undefined || data === null || data.length === 0) {
            return data;
        }
        return toUint8Array(encryptUint32Array(toUint32Array(data, true), toUint32Array(fixk(key), false)), false);
    }

    function encryptToString(data, key) {
        return window.btoa(toAsciiString(encrypt(data, key)));
    }

    function decrypt(data, key) {
        if (typeof data === 'string') data = base64ToBytes(data);
        if (typeof key === 'string') key = toBytes(key);
        if (data === undefined || data === null || data.length === 0) {
            return data;
        }
        return toUint8Array(decryptUint32Array(toUint32Array(data, false), toUint32Array(fixk(key), false)), true);
    }

    function decryptToString(data, key) {
        return toString(decrypt(data, key));
    }

    global.XXTEA = Object.create(null, {
        toBytes: { value: toBytes },
        toString: { value: toString },
        encrypt: { value: encrypt },
        encryptToString: { value: encryptToString },
        decrypt: { value: decrypt },
        decryptToString: { value: decryptToString }
    });
})(this || [eval][0]('this'));

眼睛都看花了。。。

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

Welcome to iptv.cc !

回复

使用道具 举报

头像被屏蔽

签到天数: 174 天

[LV.7]炉火纯青

发表于 2024-6-24 20:19:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

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

Welcome to iptv.cc !

回复

使用道具 举报

头像被屏蔽

签到天数: 174 天

[LV.7]炉火纯青

发表于 2024-6-24 20:25:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 228 天

[LV.7]炉火纯青

发表于 2024-6-24 22:34:16 | 显示全部楼层
关键是静态,没什么意义,反而吉林省台有点意思



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册需人工审核(节假日除外)

×

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 85 天

[LV.6]渐入佳境

 楼主| 发表于 2024-6-25 00:06:49 | 显示全部楼层
qqincai 发表于 2024-6-24 22:34
关键是静态,没什么意义,反而吉林省台有点意思

吉林省台js代码我发隔壁了,你帮我看下。如何改成php代码形式

点评

吉林台照此套。  详情 回复 发表于 2024-7-2 22:00

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 6 天

[LV.2]登堂入室

发表于 2024-7-2 22:00:35 | 显示全部楼层
jiaerfeng 发表于 2024-6-25 00:06
吉林省台js代码我发隔壁了,你帮我看下。如何改成php代码形式

吉林台照此套。

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

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

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

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

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

GMT+8, 2025-1-31 11:25 , Processed in 0.104006 second(s), 19 queries .

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

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