PageSourceSearch

https://www.lx86.net/static/common/js/bdtj.js

js lx86.net collected 2026-09-29 18:36:11 UTC 10,207 bytes, 315 lines download raw bytes

1
2/**
3 * Base64 ç±»
4 * 提供编码和解码 Base64 的方法
5 */
6function Base64() {
7    // private property
8    _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
9    // _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
10    // public method for encoding
11    this.encode = function (input) {
12        var output = "";
13        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
14        var i = 0;
15        input = _utf8_encode(input);
16        while (i < input.length) {
17            chr1 = input.charCodeAt(i++);
18            chr2 = input.charCodeAt(i++);
19            chr3 = input.charCodeAt(i++);
20            enc1 = chr1 >> 2;
21            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
22            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
23            enc4 = chr3 & 63;
24            if (isNaN(chr2)) {
25                enc3 = enc4 = 64;
26            } else if (isNaN(chr3)) {
27                enc4 = 64;
28            }
29            output = output +
30                _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
31                _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
32        }
33        return output;
34    }
35    // public method for decoding
36    this.decode = function (input) {
37        var output = "";
38        var chr1, chr2, chr3;
39        var enc1, enc2, enc3, enc4;
40        var i = 0;
41        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
42        while (i < input.length) {
43            enc1 = _keyStr.indexOf(input.charAt(i++));
44            enc2 = _keyStr.indexOf(input.charAt(i++));
45            enc3 = _keyStr.indexOf(input.charAt(i++));
46            enc4 = _keyStr.indexOf(input.charAt(i++));
47            chr1 = (enc1 << 2) | (enc2 >> 4);
48            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
49            chr3 = ((enc3 & 3) << 6) | enc4;
50            output = output + String.fromCharCode(chr1);
51            if (enc3 != 64) {
52                output = output + String.fromCharCode(chr2);
53            }
54            if (enc4 != 64) {
55                output = output + String.fromCharCode(chr3);
56            }
57        }
58        output = _utf8_decode(output);
59        return output;
60    }
61    // private method for UTF-8 encoding
62    _utf8_encode = function (string) {
63        string = string.replace(/\r\n/g, "\n");
64        var utftext = "";
65        for (var n = 0; n < string.length; n++) {
66            var c = string.charCodeAt(n);
67            if (c < 128) {
68                utftext += String.fromCharCode(c);
69            } else if ((c > 127) && (c < 2048)) {
70                utftext += String.fromCharCode((c >> 6) | 192);
71                utftext += String.fromCharCode((c & 63) | 128);
72            } else {
73                utftext += String.fromCharCode((c >> 12) | 224);
74                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
75                utftext += String.fromCharCode((c & 63) | 128);
76            }
77
78        }
79        return utftext;
80    }
81    // private method for UTF-8 decoding
82    _utf8_decode = function (utftext) {
83        var string = "";
84        var i = 0;
85        var c = c1 = c2 = 0;
86        while (i < utftext.length) {
87            c = utftext.charCodeAt(i);
88            if (c < 128) {
89                string += String.fromCharCode(c);
90                i++;
91            } else if ((c > 191) && (c < 224)) {
92                c2 = utftext.charCodeAt(i + 1);
93                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
94                i += 2;
95            } else {
96                c2 = utftext.charCodeAt(i + 1);
97                c3 = utftext.charCodeAt(i + 2);
98                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
99                i += 3;
100            }
101        }
102        return string;
103    }
104}
105
106/*
107 * JavaScript base64 / base64url encoder and decoder
108 */
109
110var b64c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"   // base64 dictionary
111var b64u = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"   // base64url dictionary
112var b64pad = '='
113
114/* 
115 * base64_encode_data
116 * 内部助手,将数据编码为 base64,使用指定的字典。
117 */
118function base64_encode_data(data, len, b64x) {
119    var dst = ""
120    var i
121
122    for (i = 0; i <= len - 3; i += 3) {
123        dst += b64x.charAt(data.charCodeAt(i) >>> 2)
124        dst += b64x.charAt(((data.charCodeAt(i) & 3) << 4) | (data.charCodeAt(i + 1) >>> 4))
125        dst += b64x.charAt(((data.charCodeAt(i + 1) & 15) << 2) | (data.charCodeAt(i + 2) >>> 6))
126        dst += b64x.charAt(data.charCodeAt(i + 2) & 63)
127    }
128
129    if (len % 3 == 2) {
130        dst += b64x.charAt(data.charCodeAt(i) >>> 2)
131        dst += b64x.charAt(((data.charCodeAt(i) & 3) << 4) | (data.charCodeAt(i + 1) >>> 4))
132        dst += b64x.charAt(((data.charCodeAt(i + 1) & 15) << 2))
133        dst += b64pad
134    }
135    else if (len % 3 == 1) {
136        dst += b64x.charAt(data.charCodeAt(i) >>> 2)
137        dst += b64x.charAt(((data.charCodeAt(i) & 3) << 4))
138        dst += b64pad
139        dst += b64pad
140    }
141
142    return dst
143}
144
145/*
146 * base64_encode
147 * 将 JavaScript 字符串编码为 base64。
148 * 指定的字符串首先从 JavaScript UCS-2 转换为 UTF-8。
149 */
150function base64_encode(str) {
151    var utf8str = unescape(encodeURIComponent(str))
152    return base64_encode_data(utf8str, utf8str.length, b64c)
153}
154
155/*
156 * base64url_encode
157 * 将 JavaScript 字符串编码为 base64url。
158 * 指定的字符串首先从 JavaScript UCS-2 转换为 UTF-8。
159 */
160function base64url_encode(str) {
161    var utf8str = unescape(encodeURIComponent(str))
162    return base64_encode_data(utf8str, utf8str.length, b64u)
163}
164
165/*
166 * base64_charIndex
167 * 内部助手,将 base64 字符转换为其整数索引。
168 */
169function base64_charIndex(c) {
170    if (c == "+") return 62
171    if (c == "/") return 63
172    return b64u.indexOf(c)
173}
174
175/*
176 * base64_decode
177 * 将 base64 或 base64url 字符串解码为 JavaScript 字符串。
178 * 输入假定为以 base64/base64url 编码的 UTF-8 字符串。
179 * 返回结果是 JavaScript (UCS-2) 字符串。
180 */
181function base64_decode(data) {
182    var dst = ""
183    var i, a, b, c, d, z
184
185    for (i = 0; i < data.length - 3; i += 4) {
186        a = base64_charIndex(data.charAt(i + 0))
187        b = base64_charIndex(data.charAt(i + 1))
188        c = base64_charIndex(data.charAt(i + 2))
189        d = base64_charIndex(data.charAt(i + 3))
190
191        dst += String.fromCharCode((a << 2) | (b >>> 4))
192        if (data.charAt(i + 2) != b64pad)
193            dst += String.fromCharCode(((b << 4) & 0xF0) | ((c >>> 2) & 0x0F))
194        if (data.charAt(i + 3) != b64pad)
195            dst += String.fromCharCode(((c << 6) & 0xC0) | d)
196    }
197
198    dst = decodeURIComponent(escape(dst))
199    return dst
200}
201
202/*
203 * base64url_sniff
204 * 检查指定的 base64 字符串是否包含 base64url 特定字符。
205 * 如果指定的字符串是 base64url 编码,则返回 true,否则返回 false。
206 */
207function base64url_sniff(base64) {
208    if (base64.indexOf("-") >= 0) return true
209    if (base64.indexOf("_") >= 0) return true
210    return false
211}
212
213/**
214 * 获取浏览器指纹
215 * 通过收集用户代理、屏幕分辨率、时区偏移等信息生成指纹
216 */
217function finger() {
218    // 获取浏览器 User Agent 信息
219    var userAgent = navigator.userAgent;
220
221    // 获取浏览器 Accept Headers 信息
222    var acceptHeaders = navigator.acceptHeader;
223
224    // 获取屏幕分辨率
225    var screenWidth = screen.width;
226    var screenHeight = screen.height;
227
228    // 获取时区偏移量
229    var timezoneOffset = new Date().getTimezoneOffset();
230
231    // 创建一个 Canvas 元素
232    var canvas = document.createElement('canvas');
233    var ctx = canvas.getContext('2d');
234
235    // 绘制一个图像,并获取图像数据的哈希值
236    var text = 'fingerprint';
237    ctx.textBaseline = "top";
238    ctx.font = "14px 'Arial'";
239    ctx.textBaseline = "alphabetic";
240    ctx.fillStyle = "#f60";
241    ctx.fillRect(125, 1, 62, 20);
242    ctx.fillStyle = "#069";
243    ctx.fillText(text, 2, 15);
244    ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
245    ctx.fillText(text, 4, 17);
246
247    var canvasData = canvas.toDataURL();
248    var canvasHash = hash(canvasData);
249
250    // 获取本地 IP 地址和端口号
251    var rtcPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
252    if (rtcPeerConnection) {
253        var pc = new rtcPeerConnection({
254            iceServers: []
255        });
256        pc.createDataChannel("");
257        pc.createOffer(function (result) {
258            pc.setLocalDescription(result, function () { }, function () { });
259        }, function () { });
260        pc.onicecandidate = function (event) {
261            if (event && event.candidate && event.candidate.candidate) {
262                var address = event.candidate.candidate.split(' ')[4];
263                var port = event.candidate.candidate.split(' ')[5];
264                var ip = address.split(':')[0];
265
266            }
267        };
268    }
269
270    // 整合上述信息生成浏览器指纹
271    var fingerprint = userAgent + acceptHeaders + screenWidth + screenHeight + timezoneOffset + canvasHash;
272
273    // 计算哈希值
274    function hash(str) {
275        var hash = 0;
276        for (var i = 0; i < str.length; i++) {
277            var char = str.charCodeAt(i);
278            hash = ((hash << 5) - hash) + char;
279            hash = hash & hash;
280        }
281        return hash;
282    }
283    return CryptoJS.MD5(fingerprint).toString();
284}
285
286/**
287 * 页面重定向
288 * 根据设备类型判断是否重定向到移动站点
289 */
290var browserInfo = new Browser();
291if (typeof mSiteLink !== 'undefined') {
292    if ((browserInfo.device && browserInfo.device.toLocaleLowerCase() == 'mobile')
293        || (browserInfo.device && browserInfo.device.toLocaleLowerCase() == 'tablet')) {
294        location.href = mSiteLink;
295    }
296}
297
298function setUserCookie() {
299    // 判断本地存储中是否存在用户指纹
300    var userLocal = localStorage.getItem("browser_id");
301
302    // 判断是否存在
303    if (!userLocal) {
304        var browser_id = finger(); // 获取指纹
305
306        // 记录用户指纹
307        if (browser_id) {
308            // 将browser_id存入localstorage
309            localStorage.setItem("browser_id", browser_id);
310        }
311    }
312}
313
314// 调用方法
315setUserCookie();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.