当前位置: 首页 > news >正文

【前端】js通过canvas获取浏览器的唯一指纹可以当做唯一标识

【前端】js通过canvas获取浏览器的唯一指纹可以当做唯一标识

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>JS Bin</title> </head> <body> <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script> <script> var getCanvasFp = function (options) { options = options ? options : {}; var result = [] // Very simple now, need to make it more complex (geo shapes etc) var canvas = document.createElement('canvas') canvas.width = 2000 canvas.height = 200 canvas.style.display = 'inline' var ctx = canvas.getContext('2d') // detect browser support of canvas winding // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/ // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/canvas/winding.js ctx.rect(0, 0, 10, 10) ctx.rect(2, 2, 6, 6) result.push('canvas winding:' + ((ctx.isPointInPath(5, 5, 'evenodd') === false) ? 'yes' : 'no')) ctx.textBaseline = 'alphabetic' ctx.fillStyle = '#f60' ctx.fillRect(125, 1, 62, 20) ctx.fillStyle = '#069' // https://github.com/Valve/fingerprintjs2/issues/66 if (options.dontUseFakeFontInCanvas) { ctx.font = '11pt Arial' } else { ctx.font = '11pt no-real-font-123' } ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 2, 15) ctx.fillStyle = 'rgba(102, 204, 0, 0.2)' ctx.font = '18pt Arial' ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 4, 45) // canvas blending // http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/ // http://jsfiddle.net/NDYV8/16/ ctx.globalCompositeOperation = 'multiply' ctx.fillStyle = 'rgb(255,0,255)' ctx.beginPath() ctx.arc(50, 50, 50, 0, Math.PI * 2, true) ctx.closePath() ctx.fill() ctx.fillStyle = 'rgb(0,255,255)' ctx.beginPath() ctx.arc(100, 50, 50, 0, Math.PI * 2, true) ctx.closePath() ctx.fill() ctx.fillStyle = 'rgb(255,255,0)' ctx.beginPath() ctx.arc(75, 100, 50, 0, Math.PI * 2, true) ctx.closePath() ctx.fill() ctx.fillStyle = 'rgb(255,0,255)' // canvas winding // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/ // http://jsfiddle.net/NDYV8/19/ ctx.arc(75, 75, 75, 0, Math.PI * 2, true) ctx.arc(75, 75, 25, 0, Math.PI * 2, true) ctx.fill('evenodd') if (canvas.toDataURL) { result.push('canvas fp:' + canvas.toDataURL()) } return result } let fingerPrintRawData = getCanvasFp()[1]; let fingerPrintHash = md5(fingerPrintRawData); document.write("浏览器指纹 : " + fingerPrintHash); </script> </body> </html>

canvas指纹(帆布指纹)_夏天然后的博客-CSDN博客

http://www.jsqmd.com/news/962592/

相关文章:

  • Proteus监视变量功能详解:嵌入式仿真调试的高效内窥镜
  • 全面掌握ERPNext:开源企业管理系统实战部署与核心模块深度解析
  • 嵌入式开发必备:二进制文件转C数组工具DataToHex的设计与实现
  • 终极教程:30分钟完成iPad mini全系列越狱的完整指南
  • 2026年录音转文字保姆级教程|免费语音转文字软件和APP推荐
  • 海口卫生间发霉、外墙掉皮、地下室返潮维修攻略!2026 海口本土防水公司实测排名,源注防水专治反复渗漏 - 防水空鼓维修家
  • 第10章:制作并销售技术课程——从课程设计到分销
  • 如何轻松捕获网页视频?猫抓浏览器扩展带来的免费资源获取新体验
  • 【前端】js下载文件(mp4视频图片pdf等) 而不是新窗口直接打开
  • C语言整数溢出警告解析:宏定义、类型推断与嵌入式安全实践
  • 实时数字人部署实战:3大策略解决音视频同步与性能瓶颈
  • 028、Zephyr RTOS设备树实战:I2C配置
  • 终极指南:如何在macOS上轻松制作Windows启动盘?WinDiskWriter让你零门槛搞定!
  • 高频开关电源变压器设计:从原理到实践,突破调参瓶颈
  • Transformers 训练模型持久化与推理加载全流程详解
  • 基于Git Hook的代码质量防线:Commit前自动格式化+静态扫描
  • SideJITServer:iOS 17无线JIT编译的终极解决方案
  • uesave:5分钟掌握虚幻引擎游戏存档编辑,解锁无限游戏可能
  • OpenRocket火箭仿真软件:开源模型火箭设计与飞行分析技术工具
  • 3分钟搞定!Mac用户的Windows启动盘制作终极指南:WinDiskWriter完全教程
  • Sketch MeaXure:设计师必备的智能标注插件,让设计交付效率提升300%
  • 2026甄选:江西电大中专报名与成人高考函授报考正规品牌机构解析 - 品牌企业推荐师(官方)
  • 鸿蒙 App 集成 AI 助手:架构设计 + 实战代码
  • 2026无锡黄金回收权威行情解读,龙头品牌领先实操攻略 - 奢侈品回收评测
  • 如何永久保存微信聊天记录:WeChatMsg完整备份与导出指南
  • 【实战|附源码】PHP搭建DCS分布式控制系统:工业监控后台完整实现方案
  • 网盘直链下载助手LinkSwift:免费获取九大网盘真实下载地址的终极指南
  • Video2X 6.0.0:免费AI视频放大神器,让模糊视频重获新生
  • 如何快速上手Flashtool:索尼Xperia设备刷机终极指南
  • Arduino CNC运动控制固件包:GRBL源码+编译配置+全功能模块