如何生成更短的base64字符串?

时间:2014-12-21 13:01:05

标签: macos shell base64 fish

我正在使用

printf "%s%s" $url (date +%s) | base64

根据URL和时间戳生成伪唯一字符串:

cRH9qeL3XyVnaXJkppBuH20tf5JlcG9uFX1lL2IvdHRRRS9kMMQxOPLKNYIzQQ==

这对我来说太长了。有没有办法压缩或使字符串缩短一点?

注意:我使用生成的字符串在文件系统中创建一个目录,我不能使用原始URL,因为它包含斜杠和其他标点符号,我想将检查保持在最低限度。 base64似乎是生成统一字母数字字符串的一种非常简单的解决方案。如果我能使它更短

1 个答案:

答案 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