"TmSqr0jZItvZP4ueSsqnjJm8H0A=" Base64 解码问题?

2018-11-20 22:04:32 +08:00
 pack27

正在学习 JAVA,练手写程序。 从海盗湾下载 dump 文件( csv 格式),想做一个搜索程序。 输出文件时发现 dump 文件里面的 hash 字段,无法转成磁力链的 hash。

字段标记是 HASH(B64),尝试用 Java 8 的 Base64 类解码, Basic/URL/MIME 三种方式都试过,CharSet 也设置过, 结果总是乱码。 从 TPB 网站找到同一文件,得到的 HASH 进行 Base64 编码,也不是字段里的内容。

测试用 Hash (内容是 OFFICE 2016 ): "TmSqr0jZItvZP4ueSsqnjJm8H0A="

磁力链 Hash: "4E64AAAF48D922DBD93F8B9E4ACAA78C99BC1F40"

转换代码: String s = "TmSqr0jZItvZP4ueSsqnjJm8H0A="; byte[] b = Base64.getUrlDecoder().decode(s); System.out.println(new String(b); // System.out.println(new String(b, Charset.forName(...)));

请问什么地方出问题了?

1479 次点击
所在节点    Java
6 条回复
GDC
2018-11-20 22:10:57 +08:00
因为磁力链本来就不是 base64 啊…… 固定长度的值,怎么会是 base64 呢…
pack27
2018-11-20 22:21:42 +08:00
@GDC
抱歉,我讲得不清楚。
我不是要将磁力链转成 Base64。

是 DUMP 文件里面 hash 字段是上面的编码,无法直接改成磁力链。
我要先将它解码,再转换。可惜不成功。
它标题是 HASH(B64),加上有点像,所以猜测是 Base64 编码。
billlee
2018-11-20 22:51:56 +08:00
$ echo TmSqr0jZItvZP4ueSsqnjJm8H0A= | base64 -d | xxd
00000000: 4e64 aaaf 48d9 22db d93f 8b9e 4aca a78c Nd..H."..?..J...
00000010: 99bc 1f40 ...@
pack27
2018-11-20 22:59:29 +08:00
@billlee
晕,Linux 可以转换。
看来是字符集设置问题?
billlee
2018-11-20 23:40:11 +08:00
@pack27 #4 和字符集没有关系,base64 decode 出来的就是一个 20 字节的 byte array, 不是字符。
pack27
2018-11-21 00:09:20 +08:00
@billlee
谢谢提醒,是我先入为主认为 Hash 必然是 String。
其实编码前的原始数据是 2/16 进制 byte。

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

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

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

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

© 2021 V2EX