我正在查看处理文件上传的特定 Web 应用程序的代码。出于某种原因,他们没有使用加密哈希函数(在这种情况下为 SHA-256),而是从中派生一个 ID,并在任何地方使用它来唯一标识文件。
涉及的步骤如下:
- 计算所需文件的 SHA-256 总和。
 - 每次迭代最多取 3 个字符,并将其视为十六进制字符串,将其转换为等效的 base62 表示法(即
0-9a-zA-Z => 0 - 62)。 - 按该顺序附加这些字符串,并获取“ID”。
 
例如:
hash (file) = 26ba0a896923d2de4cad532a3f05da725d9cc08d371eaf96905f5bbc1901b56f
26b  -------> 9Z
a0a  -------> Fs
896  -------> zs
923  -------> BJ
d2d  -------> Sp
e4c  -------> X2
ad5  -------> IJ
32a  -------> d4
3f0  -------> gg
5da  -------> oa
725  -------> tv
d9c  -------> Uc
c08  -------> NG
d37  -------> Sz
1ea  -------> 7U
f96  -------> 12m
905  -------> Bf
f5b  -------> 11p
bc1  -------> Mx
901  -------> Bb
b56  -------> KO
f    -------> f
ID = 9ZFszsBJSpX2IJd4ggoatvUcNGSz7U12mBf11pMxBbKOf
对我来说,这似乎根本不是截断散列的安全方法。特别是,在我看来,碰撞的可能性会以这种方式增加。*
上述操作是否会造成问题,或者它们不会干扰 SHA256 的加密强度?
* SHA-2 函数的阻力可能会阻止攻击者利用它。不过,我只关心函数本身的前提。