js获取浏览器指纹

需要移入crypto-js-4.0.0.min.js

官方文档:https://cryptojs.gitbook.io/docs/

github:https://github.com/brix/crypto-js

javascript 复制代码
finger: function () {
            // 获取浏览器 User Agent 信息
            var userAgent = navigator.userAgent;

            // 获取浏览器 Accept Headers 信息
            var acceptHeaders = navigator.acceptHeader;

            // 获取屏幕分辨率
            var screenWidth = screen.width;
            var screenHeight = screen.height;

            // 获取时区偏移量
            var timezoneOffset = new Date().getTimezoneOffset();

            // 创建一个 Canvas 元素
            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');

            // 绘制一个图像,并获取图像数据的哈希值
            var text = 'fingerprint';
            ctx.textBaseline = "top";
            ctx.font = "14px 'Arial'";
            ctx.textBaseline = "alphabetic";
            ctx.fillStyle = "#f60";
            ctx.fillRect(125, 1, 62, 20);
            ctx.fillStyle = "#069";
            ctx.fillText(text, 2, 15);
            ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
            ctx.fillText(text, 4, 17);

            var canvasData = canvas.toDataURL();
            var canvasHash = hash(canvasData);

            // 获取本地 IP 地址和端口号
            var rtcPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
            if (rtcPeerConnection) {
                var pc = new rtcPeerConnection({
                    iceServers: []
                });
                pc.createDataChannel("");
                pc.createOffer(function (result) {
                    pc.setLocalDescription(result, function () { }, function () { });
                }, function () { });
                pc.onicecandidate = function (event) {
                    if (event && event.candidate && event.candidate.candidate) {
                        var address = event.candidate.candidate.split(' ')[4];
                        var port = event.candidate.candidate.split(' ')[5];
                        var ip = address.split(':')[0];

                    }
                };
            }

            // 整合上述信息生成浏览器指纹
            var fingerprint = userAgent + acceptHeaders + screenWidth + screenHeight + timezoneOffset + canvasHash;

            // 计算哈希值
            function hash(str) {
                var hash = 0;
                for (var i = 0; i < str.length; i++) {
                    var char = str.charCodeAt(i);
                    hash = ((hash << 5) - hash) + char;
                    hash = hash & hash;
                }
                return hash;
            }
            return CryptoJS.MD5(fingerprint).toString();
        }
相关推荐
Mr.Jessy17 小时前
JavaScript高级:构造函数与原型
开发语言·前端·javascript·学习·ecmascript
云栖梦泽19 小时前
鸿蒙应用签名与上架全流程:从开发完成到用户手中
开发语言·鸿蒙系统
爱上妖精的尾巴20 小时前
6-4 WPS JS宏 不重复随机取值应用
开发语言·前端·javascript
小鸡吃米…21 小时前
Python 列表
开发语言·python
三七吃山漆21 小时前
攻防世界——wife_wife
前端·javascript·web安全·网络安全·ctf
用户479492835691521 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
kaikaile19951 天前
基于C#实现一维码和二维码打印程序
开发语言·c#
GISer_Jing1 天前
前端营销技术实战:数据+AI实战指南
前端·javascript·人工智能
我不是程序猿儿1 天前
【C#】画图控件的FormsPlot中的Refresh功能调用消耗时间不一致缘由
开发语言·c#
rit84324991 天前
C# Socket 聊天室(含文件传输)
服务器·开发语言·c#