我正在使用
printf "%s%s" $url (date +%s) | base64
根据URL和时间戳生成伪唯一字符串:
cRH9qeL3XyVnaXJkppBuH20tf5JlcG9uFX1lL2IvdHRRRS9kMMQxOPLKNYIzQQ==
这对我来说太长了。有没有办法压缩或使字符串缩短一点?
注意:我使用生成的字符串在文件系统中创建一个目录,我不能使用原始URL,因为它包含斜杠和其他标点符号,我想将检查保持在最低限度。 base64
似乎是生成统一字母数字字符串的一种非常简单的解决方案。如果我能使它更短。
答案 0 :(得分:1)
给定字符串的base64转换将始终相同。 base64没有“更短的版本”。但是你可以做的只是检索base64结果的第一个字符;以cut
为例。
在此示例中,最终结果将是base64转换的前10个字符:
$> printf "%s%s" $url (date +%s) | base64 | cut -c -10
cRH9qeL3Xy
如果base64结果短于10个字符,则使用cut
这种方式也是安全的。
但请注意,通过这样做,缩短字符串上的base64解码将不会产生原始字符串。
此外,如果您有多个几乎相同的字符串,缩短的base64可能会相同:
$> echo "http://www.google.com" | base64 | cut -c -10
aHR0cDovL3
$> echo "http://www.google.com/test" | base64 | cut -c -10
aHR0cDovL3
另一种可能性,如果您不介意无法从编码的字符串中检索原始字符串,则使用哈希函数,例如md5或sha:
$> echo "http://www.google.com" | md5sum
b7d1c31f1654ddf1043260b571e9d8ba -
$> echo "http://www.google.com" | md5sum | cut -c -10
b7d1c31f16
$> echo "http://www.google.com/test" | md5sum | cut -c -10
6d0238f364