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();
        }
相关推荐
hj5914_前端新手3 小时前
javascript基础- 函数中 this 指向、call、apply、bind
前端·javascript
Hilaku3 小时前
都2025年了,我们还有必要为了兼容性,去写那么多polyfill吗?
前端·javascript·css
LuckySusu3 小时前
【js篇】JavaScript 原型修改 vs 重写:深入理解 constructor的指向问题
前端·javascript
LuckySusu3 小时前
【js篇】如何准确获取对象自身的属性?hasOwnProperty深度解析
前端·javascript
LuckySusu3 小时前
【js篇】深入理解 JavaScript 作用域与作用域链
前端·javascript
LuckySusu3 小时前
【js篇】call() 与 apply()深度对比
前端·javascript
LuckySusu3 小时前
【js篇】addEventListener()方法的参数和使用
前端·javascript
LuckySusu3 小时前
【js篇】深入理解 JavaScript 原型与原型链
前端·javascript
云枫晖4 小时前
手写Promise-构造函数
前端·javascript
naice5 小时前
我对github的图片很不爽了,于是用AI写了一个图片预览插件
前端·javascript·git