Chr*_*man 9 uniqueidentifier microsoft-metro windows-8
我们希望在Windows 8 Metro应用程序中使用唯一的设备标识符,建议是ASHWID,在此处记录:
http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx
我很难看到如何保证它的独特之处.格式包括每个硬件组件两个字节,其中唯一可识别的是MAC地址和硬盘序列号.但这些值只有两个字节似乎不够.
如果使用的字节不是最低有效数字(最右边,人类读取它们),那么生产线上相邻的两台相同的笔记本电脑可能具有相同的ASHWID.MAC和驱动器序列可能是相邻的.
所以,我想我的问题的关键在于,在你可能遇到重复之前,必须使用相同的CPU类型和内存配置生成多少设备.看起来像生日悖论一样的问题,所以我找到了一个计算器并插入数字:)
使用一个MAC地址和一个每个具有两个字节标识符的硬盘,您有大约40亿个排列.一旦你只分配了其中的6,000个,那么大约50/50就是你有两个相同的.
(转到http://jeff.aaron.ca/cgi-bin/birthday并插入"6563"和"4294967296"进行实际计算).
所以这真的不是很独特.我是否对这个标识符持怀疑态度,或者我错过了一些非常重要的东西?
不,不保证 ASHWID 能够唯一标识设备。在工作中,我每天都会遇到数十次碰撞,而每月一次是我们的容忍度。
此外,同一设备的 ASHWID 可能会经常发生变化,因为 Windows 8 通常在可能添加扩展坞、USB 拇指驱动器或插入式蓝牙适配器的笔记本电脑上运行。ASHWID 的最佳用途是验证用户是否仅将您的应用程序安装到有限数量的设备上,您可以通过解析 ASHWID 并有选择地将其与该用户之前看到的 ASHWID 进行比较来实现这一点。
至于唯一的硬件标识符,我建议对包含多个组件的字符串进行 MD5 摘要,其中 ASHWID 的某些组件可以发挥作用。
您可能会随机生成一个大数字(64 位以上)并将其存储(例如在注册表中)。当然,如果您希望哈希中包含其他内容,则用户的登录名/ID 对于该用户来说应该是唯一的。您还需要考虑如果用户克隆操作系统安装或在驱动器故障后更换硬盘,您想要做什么。
回到 Windows 桌面世界,我使用了 MachineGuid 注册表项和启动设备的序列号,但我正在努力在 Windows 应用商店应用程序中访问该信息。如果您有权访问,MachineGuid 位于 中HKLM\SOFTWARE\Microsoft\Cryptography,MS 保证它是唯一的。引导设备的序列号::GetVolumeInformationW(::SHGetFolderPathW(~),~)将相当唯一,但只有 32 位。
| 归档时间: |
|
| 查看次数: |
2208 次 |
| 最近记录: |