pack27
V2EX  ›  Java

"TmSqr0jZItvZP4ueSsqnjJm8H0A=" Base64 解码问题?

  •  
  •   pack27 · Nov 20, 2018 · 1917 views
    This topic created in 2797 days ago, the information mentioned may be changed or developed.

    正在学习 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(...)));

    请问什么地方出问题了?

    GDC
        1
    GDC  
       Nov 20, 2018
    因为磁力链本来就不是 base64 啊…… 固定长度的值,怎么会是 base64 呢…
    pack27
        2
    pack27  
    OP
       Nov 20, 2018
    @GDC
    抱歉,我讲得不清楚。
    我不是要将磁力链转成 Base64。

    是 DUMP 文件里面 hash 字段是上面的编码,无法直接改成磁力链。
    我要先将它解码,再转换。可惜不成功。
    它标题是 HASH(B64),加上有点像,所以猜测是 Base64 编码。
    billlee
        3
    billlee  
       Nov 20, 2018   ❤️ 1
    $ echo TmSqr0jZItvZP4ueSsqnjJm8H0A= | base64 -d | xxd
    00000000: 4e64 aaaf 48d9 22db d93f 8b9e 4aca a78c Nd..H."..?..J...
    00000010: 99bc 1f40 ...@
    pack27
        4
    pack27  
    OP
       Nov 20, 2018
    @billlee
    晕,Linux 可以转换。
    看来是字符集设置问题?
    billlee
        5
    billlee  
       Nov 20, 2018
    @pack27 #4 和字符集没有关系,base64 decode 出来的就是一个 20 字节的 byte array, 不是字符。
    pack27
        6
    pack27  
    OP
       Nov 21, 2018
    @billlee
    谢谢提醒,是我先入为主认为 Hash 必然是 String。
    其实编码前的原始数据是 2/16 进制 byte。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2837 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 07:40 · PVG 15:40 · LAX 00:40 · JFK 03:40
    ♥ Do have faith in what you're doing.