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();
        }
相关推荐
阿猿收手吧!10 分钟前
【C++】高并发内存池架构与设计解析
开发语言·c++·架构
唠玖馆18 分钟前
c++ 类和对象(全)
java·开发语言·c++
echome88822 分钟前
Python 异步编程实战:async/await 从入门到精通
开发语言·python·php
小杍随笔44 分钟前
【Rust 语言编程知识与应用:自定义数据类型详解】
开发语言·后端·rust
m0_528174451 小时前
C++中的代理模式变体
开发语言·c++·算法
皙然1 小时前
深入理解 Java HashMap:从底层原理、源码设计到面试考点全解析
java·开发语言·面试
蜗牛会飞 20241 小时前
大数据时代个人信息保护五大挑战
开发语言·华为云·个人开发·c5全栈
mjhcsp1 小时前
C++ 折半搜索(Meet in the Middle):突破指数级复杂度的分治策略
开发语言·c++
mftang1 小时前
C语言条件编译详解
c语言·开发语言
2401_883035461 小时前
C++代码风格检查工具
开发语言·c++·算法