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();
        }
相关推荐
无所事事的海绵宝宝1 分钟前
python基础
开发语言·python
xu_duo_i8 分钟前
vue3+element-plus图片上传,前端压缩(纯函数,无插件)
前端·javascript·vue.js
Chen不旧12 分钟前
Java模拟死锁
java·开发语言·synchronized·reentrantlock·死锁
菩提树下的凡夫20 分钟前
如何将python的程序py文件转换为exe程序
开发语言·python
萧曵 丶22 分钟前
Java 安全的单例模式详解
java·开发语言·单例模式
POLITE325 分钟前
Leetcode 240. 搜索二维矩阵 II JavaScript (Day 9)
javascript·leetcode·矩阵
superman超哥27 分钟前
Rust 错误处理模式:Result、?运算符与 anyhow 的最佳实践
开发语言·后端·rust·运算符·anyhow·rust 错误处理
lly20240628 分钟前
Web 品质样式表
开发语言
Wang's Blog28 分钟前
Nodejs-HardCore: 模块管理与I/O操作详解
开发语言·nodejs
微爱帮监所写信寄信29 分钟前
微爱帮监狱寄信写信小程序PHP底层优化框架
java·开发语言·数据库·spring·微信·php·mybatis