是否有一个Delphi XE2字符串哈希函数保证是唯一的,我可以用于查找?

Bri*_*ost 1 delphi string hash delphi-xe2

我使用TClientDataSet来管理对象,并让我"数据库"访问对象数据.到目前为止,这很有效.我在数据集中有两个"特殊"(隐藏)字段 - "ObjectName"和"ObjectRef".ObjectName是My category.my object'形式的对象项的类别和名称的连接,用于将我从对象实例内部转移到记录号.该字段已编入索引.'ObjectRef'是指向该对象实例的指针的整数代码,用于所有其他对象生存期管理.

我必须为'ObjectName'字段选择一个大小,以符合我预期的最大可能类别和名称组合,但这只是一个索引,我希望保持这个大小尽可能小,以满足性能和内存的需要.是否有一个'无损'功能,我可以应用于我的表单'我的category.my name'哪个仍然是唯一的,我可以用作哈希?哈希函数看起来很聪明但不是计算机科学大师我不知道如何知道它们的输出是否是唯一的.

谢谢

RRU*_*RUZ 6

所有散列函数都有冒充的风险,但AFAIK更安全的是SHA-1算法,存在许多delphi实现,例如你可以使用 Jwscl库(JEDI Windows安全代码库),它是Windows的包装器CryptoAPI(您可以在此问题上找到delphi示例SHA1 hashing in Delphi XE)或使用TIdHashSHA1属于Indy 的类.

另一种选择是使用更简单的散列函数(非加密),如delphi在BobJenkinsHash方法中实现的Jenkins散列函数.