我正在使用谷歌身份验证器生成 TOTP,它使用 base32 编码的字符串来执行此操作。
我拥有的秘密是十六进制编码的,我需要先将其转换为 Base32,然后才能使用它。
以下站点完美地完成了它,但我需要它在 JAVA 中。:http ://tomeko.net/online_tools/hex_to_base32.php?lang=en
我对编码和解码很陌生。关于如何去做的任何想法?
我正在使用谷歌身份验证器生成 TOTP,它使用 base32 编码的字符串来执行此操作。
我拥有的秘密是十六进制编码的,我需要先将其转换为 Base32,然后才能使用它。
以下站点完美地完成了它,但我需要它在 JAVA 中。:http ://tomeko.net/online_tools/hex_to_base32.php?lang=en
我对编码和解码很陌生。关于如何去做的任何想法?
好的,这很简单。我所要做的就是将 Hex 解码为 byte[] 数组,然后使用Apache Commons Codec Java 库将其编码为 Base32 这是代码
String hexToConvert = "446a1837e14bfec34a9q0141a55ec020f73e15f4";
byte[] hexData = hexStringToByteArray(hexToConvert);
Base32 base32 = new Base32();
String encodeBase32 = base32.encodeAsString(hexData);
System.out.println("Base 32 String: " + encodeBase32);
辅助函数:这是从使用 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;
}