为了账号安全,请及时绑定邮箱和手机立即绑定

如何将长字符串转换为短字符串,并且是可逆操作

如何将长字符串转换为短字符串,并且是可逆操作

Go
Helenr 2022-09-19 14:48:36
我有一个长的,但它太长了,我怎么能把它隐蔽到一个短的。我希望这是一个可逆的操作,因为我想从短操作中获得长操作。顺便说一句,我不想将这两个字符串保存到数据库中。stringBase64
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

由于 Pigeonhole 原理,将任意长字符串转换为任意短字符串通常是不可能的:

  • 可逆性意味着转换共域(小字符串)需要至少具有与转换域(大字符串)一样多的元素,

  • 存在比不同的短字符串更多的不同长字符串。

作为整数的类比,请考虑不可能将3位数字(900种可能性)转换为2位数字(90种可能性)并且仍然是可逆的,因为90<900。

但是,如果长字符串是可预测的并且具有大量冗余,则可以尝试应用像gzip这样的无损压缩算法,以便在常见情况下缩短它。


查看完整回答
反对 回复 2022-09-19
?
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


查看完整回答
反对 回复 2022-09-19
  • 2 回答
  • 0 关注
  • 516 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信