我正在查看处理文件上传的特定 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 函数的阻力可能会阻止攻击者利用它。不过,我只关心函数本身的前提。