我正在考虑开发一些可以散列文件/目录名的东西,以减少路径的大小。
还希望最小化碰撞次数。让我们举一个例子,我想将一个85字符长的字符串哈希到一个8字符长的哈希。
例如。 " ... / thisIsSomeVerySuperUltraBigHugeVerySuperUltraBigHugeDirectoryName /... 34; => ... / ebaca39c /...
但是使用散列函数的问题是当它输出一个8字节长的字符串时,该字符串可能包含像/:*?"<> |等字符。哪些窗口不允许用作目录名称。
有什么方法可以解决这个问题吗?也许哈希函数只生成某些字符?或者,任何其他方式?
答案 0 :(得分:0)
您可以对任何哈希函数(例如SHA1)的字节进行base64表示,并删除/
,+
和=
,或者将其替换为其他字符。并截断到你想要的长度。请注意,如果您将自己限制为短名称,则散列不同的名称可能会为您提供相同的哈希值。
但是,您也可以选择随机字符串而不是哈希。看看Path.GetRandomFileName()。