在java中将十六进制字符串转换为Base32

时间:2017-06-20 13:47:03

标签: java hex decode base32

我正在使用谷歌身份验证器生成TOTP,它使用base32编码的字符串来执行此操作。

我所拥有的秘密是十六进制编码,我需要先将其转换为Base32才能使用它。

以下网站完美无缺,但我需要它在JAVA中。 :http://tomeko.net/online_tools/hex_to_base32.php?lang=en

我是编码和解码的新手。有关如何去做的任何想法?

1 个答案:

答案 0 :(得分:1)

好的,这很简单。我所要做的就是将Hex解码为byte []数组,然后使用Apache Commons Codec Java library将其编码为Base32 这是代码

String hexToConvert = "446a1837e14bfec34a9q0141a55ec020f73e15f4";
byte[] hexData = hexStringToByteArray(hexToConvert);       
Base32 base32 = new Base32();
String encodeBase32 = base32.encodeAsString(hexData);
System.out.println("Base 32 String: " + encodeBase32);

助手功能:来自Convert a string representation of a hex dump to a byte array using Java?

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}