我有一个长的,但它太长了,我怎么能把它隐蔽到一个短的。我希望这是一个可逆的操作,因为我想从短操作中获得长操作。顺便说一句,我不想将这两个字符串保存到数据库中。stringBase64
2 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
由于 Pigeonhole 原理,将任意长字符串转换为任意短字符串通常是不可能的:
可逆性意味着转换共域(小字符串)需要至少具有与转换域(大字符串)一样多的元素,
存在比不同的短字符串更多的不同长字符串。
作为整数的类比,请考虑不可能将3位数字(900种可能性)转换为2位数字(90种可能性)并且仍然是可逆的,因为90<900。
但是,如果长字符串是可预测的并且具有大量冗余,则可以尝试应用像gzip这样的无损压缩算法,以便在常见情况下缩短它。
HUX布斯
TA贡献1876条经验 获得超6个赞
Base64编码和解码确实是可逆操作。解码后的字符串较短,因此在某些情况下传输和存储可能更便宜(并非总是YMMV)。
标准库中的 base64 包具有轻松将“长”Base64 编码字符串解码为原始解码字符串所需的一切,大约缩短了 25%:
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
fmt.Println("error:", err)
}
您可以在游乐场尝试:
请注意,Base64格式存在多种变体,因此您需要确切知道使用哪种变体进行编码,并使用相同的变体进行解码。 是变体 RFC 4648。base64.StdEncoding
- 2 回答
- 0 关注
- 516 浏览
添加回答
举报
0/150
提交
取消