Articles of uniqueidentifier

如何将目录path转换为唯一的数字标识符(Linux / C ++)?

我正在调查的方式采取一个目录(文件夹),并派生某种forms的唯一的数字标识符。 我调查过“string哈希”的方法,但是, 鸽子洞原则意味着永远不可能为每一个string派生一个真正唯一的数字。 string到唯一哈希是不好的。 我最近一直在调查其他方法来实现我的目标,因此有以下问题要问: 目录时间戳 – 他们有多“独特”? 这里所描述的“stat”报告的时间戳记是什么样的(第二篇文章)? 如果分辨率足够小,是否有可能多个文件夹在Linux系统上共享完全相同的时间戳? 如果任何人有其他方法/技术,他们想分享,我会很高兴听:) 编辑1为了澄清我的用例,以回应迄今为止发布的答案:我正在Android平台上工作,所以文件系统没有链接到任何其他(除了Micro SD卡等可移动媒体除外)。 我将每个path插入数据库,但试图避免查询表时string比较。 地图/ hashmaps的使用不是一个选项在这里。 是的,path本身是唯一的,但理想情况下,我需要一个数字标识符,可以用来查询表,而不是path本身。 每个path的标识符也必须是唯一的。 我已经用std :: collat​​e进行了实验,但是发现哈希中有很多碰撞(一个数据集有20,000条path,大约有100个碰撞)。 更令人惊讶的是,每次我的应用程序运行时,哈希似乎都大不相同。 我想知道它是否以某种方式播种? 非常感谢,P

生成(非常)大的非重复整数序列,无需预先混洗

背景 我有一个简单的媒体客户端/服务器,我写了,我想产生一个非显而易见的时间价值,我发送每个命令从客户端到服务器。 时间戳会有相当的数据(纳秒分辨率,即使由于现代操作系统中定时器采样的限制,它不是真正准确的),等等。 我试图做的(在Linux上,C语言)是生成一个n位值的序列(让我们假设数据现在存储在128位的int数组元素中),没有重叠/碰撞值。 然后我将一个伪随机的128位值/数字作为“salt”,将其应用于时间戳,然后开始向服务器发送命令,递增预先腌制/预先哈希的值。 时间戳大小的原因是因为时间戳可能需要适应非常长的时间。 题 我怎么能用一个初始的盐值来完成这个序列(不碰撞)呢? 听起来和我的目标一致的最好的方法是从这篇文章中注意到 : 如果选项1对您来说不够“随机”,则使用全局(32位)计数器的CRC-32哈希值。 在N位整数和它们的CRC-N之间存在1对1的映射(双射),所以唯一性仍将得到保证。 但是,我不知道: 如果可以(有效地)扩展到128位数据。 如果某种加法/乘法的盐值为序列提供初始种子,将会扰乱它或引入冲突。 跟进 我意识到我可以使用来自libssl或类似的128位随机哈希,但我希望使用相同的盐值的远程服务器能够将散列的时间戳转换回它们的真实值。 谢谢。

Windows中用户configuration文件的唯一标识符

对于客户端/服务器应用程序,我需要集中存储通常进入用户configuration文件目录的部分configuration信息。 客户端应用程序在首次使用时将具有GUID的文件或registry项写入当前configuration文件。 此GUID随后将用作服务器上configuration数据库中的一个键。 现在我想知道如果Windows用户configuration文件已经有我可以使用的唯一标识符,而不是生成我自己的GUID。 用户名将不起作用,因为用户可能有多个configuration文件。 将它与计算机名称组合将不起作用,因为可能存在漫游configuration文件。 更新: 我只是在同一个域中的两台计算机上的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList查看SID。 漫游未启用,因此我的用户帐户在每台计算机上都有单独的configuration文件。 两个configuration文件都列出了相同的SID。 这意味着我必须继续生成我自己的GUID。

Windows唯一标识符?

所以有这个软件。 当安装它以某种方式(可能读取文件或registry项)识别我的Windows操作系统。 它应该只为每台计算机执行一次任务。 如果我卸载程序并重新安装,软件会记住它已经安装,因此不要执行任务。 如果我使用系统还原,软件也不会执行任务。 如果在安装之前加载系统映像,软件也不会执行任务。 如果我重新安装一个新窗口,那么只有软件才能完成这个任务。 IP甚至没有关系。 一切都是一样的,除了它是Windows操作系统的全新副本。 所以我想这个软件读取某种独特的操作系统标识符,然后连接到服务器来创build一个用户configuration文件。 所以问题是? 那些软件用来检查系统标识符的文件是什么? 到目前为止,我已经发现有registry下的条目。 WindowsNT / CurrentVersion和Windows /encryption,但软件不依赖于他们。 我应该在哪里search? 任何软件,可以帮助我找出?

如何获得独特的机器签名没有WMI?

我知道一个问题已经被问及为机器生成一个唯一的ID,但是我的问题稍有不同。 我想知道是否有其他方法(API调用?)获取硬件信息,而不是使用WMI。 我从MSDN了解到WMI是在Win2000中引入的,所以它似乎不能在Win98中使用。 我有一个应用程序,即使在Win98上运行(我知道它很烂,但你能做什么?),并仍然掌握硬件信息。

真的有办法唯一地识别任何电脑

我知道在stackoverflow中有一些类似的问题如下: 什么是唯一识别计算机的好方法? 什么是一个很好的独特的PC标识符? 独特的计算机ID C# WIN32_Processor :: ProcessorId对于所有计算机都是唯一的 如何唯一标识使用C#的计算机? …还有几十个,我都研究过了。 问题是,一些被接受的答案已经build议将MAC地址作为唯一的标识符,这是完全不正确的。 其他一些答案build议使用看起来更合乎逻辑的各种组件的组合。 但是,在使用组合的情况下,应该考虑哪个组件自然不太可能经常改变。 几天前,我们开发了一个软件许可问题的密钥生成器,我们使用CPUID和MAC的组合来唯一地识别Windows PC,直到实际testing,我们认为我们的方法是足够好的。 讽刺的是,当我们去testing它时,我们发现有三台电脑用我们的密钥生成器返回相同的ID! 那么,究竟有什么办法来唯一标识任何电脑? 现在我们只需要让我们的密钥生成器在Windows PC上工作。 一些使用c#的方法(如果可能的话)会很好,因为我们的系统是在.net上开发的。 更新: 对不起,造成一些混乱和明显的虚惊。 我们在检索硬件信息的方法中发现了一些不正确的地方。 我主要想到删除这个问题,因为现在我自己的困惑已经消失了,而且我相信两个或更多个组件的组合足以识别一台计算机。 然而,我决定保留它,因为我认为我应该澄清是什么导致问题,因为同样的事情可能会伤害其他人在未来。 这是我们正在做的(不包括其他代码): 我们使用getManagementInfo函数来检索MAC和处理器ID private String getManagementInfo(String StrKey_String, String strIndex) { String strHwInfo = null; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String); foreach (ManagementObject share in searcher.Get()) […]

欺骗后如何检测原始MAC地址?

我们使用下面的代码来检索Windows PC的活动MAC地址。 private static string macId() { return identifier("Win32_NetworkAdapterConfiguration", "MACAddress", "IPEnabled"); } private static string identifier(string wmiClass, string wmiProperty, string wmiMustBeTrue) { string result = ""; System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); System.Management.ManagementObjectCollection moc = mc.GetInstances(); foreach (System.Management.ManagementObject mo in moc) { if (mo[wmiMustBeTrue].ToString() == "True") { //Only get the first one if (result == "") […]

生成唯一硬件ID的可靠方法

问题:我必须为每个联网的客户端提供唯一的ID,例如: 一旦在目标计算机上安装了客户端软件,它应该保持不变(ID),如果软件重新安装在同一台计算机和同一个OS安装中,它应该继续保留, 如果在大多数情况下修改了硬件configuration(不包括更换主板) 当安装有客户端软件的硬盘驱动器被克隆到具有相同硬件configuration的另一台计算机(或尽可能相似)时,客户端软件应该知道该更改。 一点点的解释和一些背景故事: 这个问题基本上是一个古老的问题,也涉及软件复制保护的主题,因为这里提到了一些在这方面使用的机制。 我现在应该清楚,我不是在寻找一个防拷贝scheme。 请继续阅读。 🙂 我正在开发一个应该在本地networking中工作的客户端 – 服务器软件。 我必须解决的一个问题是要识别networking中的每个独特的客户端(不是那么多的问题),以便我可以将某些属性应用于每个特定的客户端,在特定的部署生命周期中保留和执行这些属性客户。 当我正在寻找解决scheme时,我意识到以下几点: Windows激活系统使用某种对硬件修改非常敏感的重指纹机制, 磁盘映像软件在安装过程中,首次运行时或以任何其他方式复制所有卷ID(在格式化时与每个分区绑定),以及自定义,唯一生成的ID,并且存储在registry中或在硬盘上,所以很容易混淆两个。 这种问题的明显select是找出BIOS标识符(不是100%确定是否通过相同的主板型号是唯一的),因为这是我可以依赖的唯一不是重复的,通过克隆,并且不能改变(至less不能使用一些用户空间程序)。 一切都失败了,要么是不可靠的(MAC克隆,任何人?),要么太苛刻(对configuration的变化太敏感)。 我想问的问题是,我正确地做,架构明智吗? 也许有一个更好的工具,我必须完成的任务… 我想到的另一种方法是类似握手机制,其中服务器维护一个连接的客户端ID的内部查找表(甚至可以完全基于软件,在任何特定时刻都是非唯一的),并告诉客户端如果在连接时提供重复的ID,则在握手期间拿出一个不同的ID。 不幸的是,这种方法并不能很好地满足在特定客户生命周期中将特性绑定到特定客户端的要求。