sha3 输出可以用作文件名吗?

Can sha3 output be used as a filename?

  1. sha3输出可以用作文件名吗?

  2. 换句话说问题:sha3输出的字符是什么?

  3. 如果这是特定于实现的,我使用 sha3 npm package.

简答

下面代码中的

filename 可以安全地用作文件名,但请注意,在许多操作系统中,文件名和路径通常有最大长度限制filename 将是 128 个字符 长。

通过快速 google,Linux 上的最大文件长度似乎是 通常 255 字符字节,最大路径长度为4096字符。在Windows上,可能还有260个字符的最大路径长度限制,请注意。

import { SHA3 } from 'sha3';

const hash = new SHA3(512);

hash.update('foo');
const filename = hash.digest('hex');

更长的答案

SHA-3 的输出是 512 位。使用问题中链接的包,hash.diget()(不带参数)return是一个包含 64 个元素 * 每个元素 8 位 = 512 位的 Buffer。如果您调用 hash.digest('hex'),它将 return 一个仅包含字符 0-9 和 a-f 的十六进制字符串,它们在文件名中都是安全的。有关其他输出格式,请参阅 digest's documentation

请注意,sha-3 可用于 512 以外的某些输出长度(224、256、384);解释是一样的,只是数字不同。

当然,可以做得更好(制作一个更短的文件名),但这对我的目的来说已经足够了。此外,实际上这里没有特定于 sha3 的内容;任何二进制数据都可以编码为可用作文件名的十六进制字符串;只需要注意长度。