import { useSuspenseQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import { useEffect, useState } from 'react' import { orpc } from '@/client/query-client' export const Route = createFileRoute('/fingerprint')({ component: FingerprintPage, loader: async ({ context }) => { await context.queryClient.ensureQueryData( orpc.fingerprint.get.queryOptions(), ) }, }) function FingerprintPage() { const query = useSuspenseQuery(orpc.fingerprint.get.queryOptions()) const [copied, setCopied] = useState(false) const data = query.data useEffect(() => { if (copied) { const timer = setTimeout(() => setCopied(false), 2000) return () => clearTimeout(timer) } }, [copied]) const handleCopy = async () => { await navigator.clipboard.writeText(data.fingerprint) setCopied(true) } const qualityConfig = { strong: { label: '强', color: 'text-green-600', bg: 'bg-green-50', border: 'border-green-200', icon: '✓', description: '推荐用于生产授权', }, medium: { label: '中', color: 'text-yellow-600', bg: 'bg-yellow-50', border: 'border-yellow-200', icon: '!', description: '可用但不理想', }, weak: { label: '弱', color: 'text-red-600', bg: 'bg-red-50', border: 'border-red-200', icon: '×', description: '仅适合开发/测试', }, } const config = qualityConfig[data.quality] return (
{/* Header */}

硬件指纹

用于软件授权和机器码识别

{/* Main Card */}
{/* Quality Badge */}
{config.icon}
指纹质量 {config.label}

{config.description}

{data.strongIdentifiersCount}
强标识符
{/* Fingerprint Display */}
机器码
{data.fingerprint}
SHA-256 哈希,43 字符 Base64URL 编码
{/* Metadata */}
生成时间
{new Date(data.timestamp).toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', })}
缓存状态
已缓存 10 分钟
{/* Info Cards */}

安全性

使用 HMAC-SHA256 加密,无法反推原始硬件信息

稳定性

基于系统 UUID、序列号等不易变更的标识符

高性能

自动缓存,减少系统调用开销

{/* Usage Hint */}

使用建议

  • 将机器码存储在授权服务器进行验证
  • 建议配合用户账号进行双因素认证
  • 同一台机器的指纹保持稳定,便于授权管理
) }