当前位置: 首页 > 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.zskr.cn/news/1474265.html

相关文章:

  • 嵌入式开发必备:二进制文件转C数组工具DataToHex的设计与实现
  • 【前端】js下载文件(mp4视频图片pdf等) 而不是新窗口直接打开
  • 终极教程:30分钟完成iPad mini全系列越狱的完整指南
  • 028、Zephyr RTOS设备树实战:I2C配置
  • 高频开关电源变压器设计:从原理到实践,突破调参瓶颈
  • 基于Git Hook的代码质量防线:Commit前自动格式化+静态扫描
  • 终极指南:如何在macOS上轻松制作Windows启动盘?WinDiskWriter让你零门槛搞定!
  • 2026甄选:江西电大中专报名与成人高考函授报考正规品牌机构解析 - 品牌企业推荐师(官方)
  • uesave:5分钟掌握虚幻引擎游戏存档编辑,解锁无限游戏可能
  • 3分钟搞定!Mac用户的Windows启动盘制作终极指南:WinDiskWriter完全教程
  • 如何快速上手Flashtool:索尼Xperia设备刷机终极指南
  • 从《西游记》看技术团队管理:唐僧为何是领导?
  • 半导体成本解析与代理商谈判实战:从PN结到芯片价格的工程师指南
  • 深圳家庭教育指导师报名机构哪家好?正规授权机构推荐:中山优才教育 - 当下教育培训干货
  • Himalaya源码解析:深入理解Lexer与Parser模块的工作原理
  • 瑞祥商联卡没用完怎么办?实用回收处理方法参考 - 圆圆收
  • next-images插件生态扩展:与其他Next.js插件集成方案
  • 深度解析AI自瞄系统:基于YOLOv8/YOLOv10的FPS游戏智能瞄准解决方案
  • 从傅里叶到拉普拉斯:一个‘衰减因子’如何让信号分析起死回生?保姆级理解指南
  • Visual Studio Code Git Graph:可视化Git工作流的革命性工具
  • 终极指南:如何用SMPL-X快速构建逼真的3D人体模型
  • google-translate-api:构建无限制免费翻译服务的Node.js技术实现方案
  • 如何快速创建Windows远程应用:RemoteApp Tool完整操作指南
  • 日本发布《数据空间利用及安全指南》2.0版
  • 2026延安黄金回收白银回收铂金回收 5 家高性价比门店实地测评盘点 - 中安检金银铂钻回收
  • UnitySimpleFileBrowser核心功能解析:拖拽交互与窗口 resize 实现原理
  • 终极指南:如何使用Flashtool轻松刷写Xperia设备固件
  • DSP串口GPS数据解析实战:从NMEA协议到液晶显示
  • 新手入门:通过快马生成的示例代码学习系统电池分析开发基础
  • 免费跨平台音乐播放器终极指南:告别会员费的全新音乐体验