【问题标题】:How to use XXD in java如何在java中使用XXD
【发布时间】:2021-11-03 23:02:12
【问题描述】:

如果我跑 终端中的echo 'E4:C8:C1:51:1A:58:1E:A6:0A:DF:E0:59:CA:4E:60:66:0B:36:0F:24:EA:76:93:39:61:F7:79:60:B2:2F:DE:B6' | xxd -r -p | openssl base64 它将打印5MjBURpYHqYK3+BZyk5gZgs2DyTqdpM5Yfd5YLIv3rY=。如何使用 java 实现相同的结果?

【问题讨论】:

    标签: java linux terminal


    【解决方案1】:

    在冒号分隔符上拆分String。将每个十六进制数字解析为 byte[],然后对该字节数组进行 base64 编码。

    String s = "E4:C8:C1:51:1A:58:1E:A6:0A:DF:E0:59:CA:4E:60:66:0B:36:"
        + "0F:24:EA:76:93:39:61:F7:79:60:B2:2F:DE:B6";
    String[] split = s.split(":");
    byte[] arr = new byte[split.length];
    for (int i = 0; i < split.length; i++) {
        arr[i] = (byte) Integer.parseInt(split[i], 16);
    }
    String o = java.util.Base64.getEncoder().encodeToString(arr);
    System.out.println(o);
    

    输出

    5MjBURpYHqYK3+BZyk5gZgs2DyTqdpM5Yfd5YLIv3rY=
    

    【讨论】:

    • 但是如果数据超过 48 个字节,openssl base64(没有 -A 上限)会插入换行符,而 Java Base64.getEncoder() 不会。使用.getMimeEncoder() 可能足够接近(它每 RFC1521/2045 打破每 76 个字符,而openssl 每 RFC1421 每 64 打破)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2017-09-09
    • 2021-10-14
    相关资源
    最近更新 更多