关于 base64 解码的问题

2021-08-23 19:40:16 +08:00
 hahaba

现有一段 base64 后的字符串:G63bLQ6yFlve46h/LibzuQ==

使用 java 的 hutool.core.codec.Base64 解出结果为:[B@4dc912af

使用 python/js/go 都解出乱码。求帮助

2283 次点击
所在节点    程序员
18 条回复
berserk
2021-08-23 19:50:38 +08:00
ynyounuo
2021-08-23 19:55:55 +08:00
这个意思是 [B 这个 object 和它的 hashcode 并不是解析出的文本
maojun
2021-08-23 19:57:19 +08:00
你的问题不在解码,而是输入编码的时候就错了
yousabuk
2021-08-23 20:07:17 +08:00
你把引用 base64 了?
wangbenjun5
2021-08-23 20:08:40 +08:00
随便找个网页版的 base64 试一下,我试了你这段字符串 decode 后是乱码,说明这个字符串就有问题吧
chendy
2021-08-23 20:17:07 +08:00
解不出来,各种乱码,编码之前的数据本来就不是字符串?
v2tudnew
2021-08-23 20:19:18 +08:00
用你的结果编码是:W0JANGRjOTEyYWY=
Kiriya
2021-08-23 20:19:59 +08:00
标准 base64 加密后应该没有 /符号,你可能引用了非标准 base64
chendy
2021-08-23 20:51:00 +08:00
顺便一说 [B@4dc912af 这明显是个 byte[] 的 toString() 结果……
hahaba
2021-08-23 21:27:24 +08:00
@chendy 想知道如何用 python 解出同样的结果。无论他是否规范,他们使用这个解出来的值进行签名的
billlee
2021-08-23 21:52:22 +08:00
@chendy 这说明楼主根本不懂二进制
chendy
2021-08-23 22:45:48 +08:00
@xunbug #10 base64 是 字节数组 和 字符串 之间的转换,默认情况下应该就是一样的结果
Mutoo
2021-08-23 23:22:42 +08:00
[B@4dc912af 的意思是该对象是个 Byte Array, ID:4dc912af
https://stackoverflow.com/a/1040883

所以你看到的本不是内容,只是个地址。
ysc3839
2021-08-23 23:28:53 +08:00
@xunbug #10 发代码上来看看吧
polaa
2021-08-23 23:44:50 +08:00
~|⇒ echo "G63bLQ6yFlve46h/LibzuQ==" |base64 -D|xxd
00000000: 1bad db2d 0eb2 165b dee3 a87f 2e26 f3b9 ...-...[.....&..
msg7086
2021-08-24 06:14:09 +08:00
解出乱码不就对了吗。你在期待什么样的结果呢。
hahaba
2021-08-24 11:06:50 +08:00
@Mutoo 正解
dallaslu
2021-08-24 20:58:25 +08:00
你再用 Java 解一次,就不是 `[B@4dc912af` 了。你可能调用了 hutool.core.codec.Base64 内返回值类型为 `byte[]` 的 decode 方法。如果 python/js/go 解出来的结果都一致,说明就该解出乱码。还是研究一下原始串是怎么编码的吧!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797543

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX