简单Canvas指纹示例

`
简单Canvas指纹示例

简单Canvas指纹示例

请打开控制台(F12)查看结果

ini 复制代码
<script>
    // 创建一个简单的Canvas指纹生成函数
    function generateCanvasFingerprint() {
        // 创建canvas元素
        const canvas = document.createElement('canvas');
        canvas.width = 200;
        canvas.height = 100;
        
        // 获取绘图上下文
        const ctx = canvas.getContext('2d');
        
        // 填充背景
        ctx.fillStyle = 'white';
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        
        // 绘制一些图形和文字
        // 绘制红色矩形
        ctx.fillStyle = 'red';
        ctx.fillRect(20, 20, 50, 50);
        
        // 绘制蓝色圆形
        ctx.fillStyle = 'blue';
        ctx.beginPath();
        ctx.arc(120, 45, 25, 0, Math.PI * 2);
        ctx.fill();
        
        // 绘制文本
        ctx.fillStyle = 'black';
        ctx.font = '16px Arial';
        ctx.fillText('Canvas指纹', 60, 80);
        
        // 获取canvas数据URL
        const dataURL = canvas.toDataURL();
        
        // 简单哈希函数
        function simpleHash(str) {
            let hash = 0;
            for (let i = 0; i < str.length; i++) {
                const char = str.charCodeAt(i);
                hash = ((hash << 5) - hash) + char;
                hash = hash & hash; // 转换为32位整数
            }
            return hash.toString(16); // 转换为16进制
        }
        
        // 计算指纹
        const fingerprint = simpleHash(dataURL);
        
        return {
            fingerprint: fingerprint,
            dataURL: dataURL
        };
    }
    
    // 生成并输出指纹
    const result = generateCanvasFingerprint();
    console.log('Canvas指纹:', result.fingerprint);
    console.log('Canvas数据URL前100个字符:', result.dataURL.substring(0, 100) + '...');
    
    // 如果浏览器支持更安全的哈希算法,也可以使用它
    if (window.crypto && window.crypto.subtle) {
        const encoder = new TextEncoder();
        const data = encoder.encode(result.dataURL);
        
        window.crypto.subtle.digest('SHA-256', data)
            .then(hashBuffer => {
                // 将哈希缓冲区转换为十六进制字符串
                const hashArray = Array.from(new Uint8Array(hashBuffer));
                const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
                
                console.log('Canvas指纹(SHA-256):', hashHex);
            });
    }
</script>

`

相关推荐
创世虚拟世界4 分钟前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实
夕阳_醉了14 分钟前
花了一天的时间,地板式扫盲了vue3所有API盲点
前端·javascript·vue.js
ShineWinsu11 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
szp200514 小时前
Cache API 会丢掉 URL 里的 #:我的 9 个模型分块一直写在同一条缓存上
javascript·浏览器
keyipatience15 小时前
TypeScript学习(1)
前端·javascript·学习·typescript·html·css3
xifangge202515 小时前
基于 JavaScript 实现 CNC 数控切削参数与螺纹公差纯前端核算引擎
开发语言·前端·javascript
honkun616 小时前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js
FRing0316 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
大明二代17 小时前
从 RAG 到有记忆的 Agent:Mastra Memory 与 PostgreSQL 实战
前端·javascript·人工智能
小羊没烦恼!18 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#