【发布时间】:2023-03-17 02:52:01
【问题描述】:
我想使用 SHA 哈希的输出来生成文件名。有什么推荐的方法吗?我尝试了 Base64 编码,但是对于一些导致文件名包含正斜杠的输入。显然,我更喜欢一种输出永远不会包含文件系统保留的字符的方法。将每个字节转换为两位数的十六进制数是可行的,但是产生更短输出的东西会更好。
【问题讨论】:
我想使用 SHA 哈希的输出来生成文件名。有什么推荐的方法吗?我尝试了 Base64 编码,但是对于一些导致文件名包含正斜杠的输入。显然,我更喜欢一种输出永远不会包含文件系统保留的字符的方法。将每个字节转换为两位数的十六进制数是可行的,但是产生更短输出的东西会更好。
【问题讨论】:
你可以使用Base32
它只使用字母和数字字符。
【讨论】:
你可以用这个
function getfilename(){
mt_srand((double)microtime()*10000);
$token=mt_rand(1, mt_getrandmax());
$uid=uniqid(md5($token),true);
if($uid!=false && $uid!='' && $uid !=NULL){ return $filename =sha1($uid);}
}
//create file name
$filename=getfilename();
$filename = substr($filename, 0, 10);
上面的代码使用当前系统时间生成文件名,同时也使用了mt_rand和MD5,这样每次代码运行时都会创建一个唯一的文件名。最终文件名是 10 个字符,您可以将其调整为您想要的任何字符数。
【讨论】: