答案 0 :(得分:4)
你的问题太模糊了。
首先,你说你想要计算两个字符串之间的相似性。这根本不需要散列。您可以使用compare
,equality
,levenshtein distance
,edit distance
等。
为什么我们使用散列
如果有一些我们无法以明文和存储的敏感数据,我们不需要在任何处理,计算或修改数据中使用数据,只需要比较它为了完全平等,我们使用散列。
eg. storing user passwords, which would need only comparison with the password string once he tries logging in
参数
速度,安全性(也许是受欢迎程度)
一些最受欢迎的哈希包括md5, SHA-1, SHA-256 and SHA-512
。这是他们安全且相对缓慢的顺序。
fast, less secure | md5 < SHA-1 < SHA-256 < SHA-512 | relatively slow, more secure
我建议使用SHA-1或SHA-256,它们足够快且足够安全。
此外,使用秘密盐可以将安全性提高多倍(使用salt时,散列会以指数方式增加安全性,原因很明显)。
答案 1 :(得分:2)
哈希与相似性无关。此外,大多数散列算法产生的结果几乎完全不同于非常相似的字符串。例如:SHA1:
The quick brown fox jumps over the lazy dog
= 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
和一个符号的区别是完全不同的字符串:
The quick brown fox jumps over the lazy cog
= de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
有一些简单且知名的算法可用于查找字符串相似性。 Hamming distance表示相同长度的字符串,Levenshtein distance表示不同长度的字符串只是string metrics
的几个示例P.S。如果你真的真的想使用散列 - 这种类型散列的正确术语是locality preserving hash。你可以阅读它here。
答案 2 :(得分:1)