2017-06-20 174 views
1

我正在使用google authenticator進行TOTP生成,它使用base32編碼的字符串來執行此操作。在java中將十六進制字符串轉換爲Base32

我有的祕密是十六進制編碼,我需要將它轉換爲Base32才能使用它。

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

我對編碼和解碼非常陌生。有關如何去做的任何想法?

+0

我第一需要解碼十六進制,然後將其轉換爲基地32? – user2013919

+0

我需要將Hex轉換爲Base32,而不僅僅是將一個字符串編碼爲Base32。謝謝 – user2013919

+0

最簡單的方法。否則,你應該自己實現算法 – xenteros

回答

1

好的,這很簡單。所有我必須做的是十六進制解碼爲字節[]數組,然後使用Apache Commons Codec Java library 這是代碼

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

輔助函數它編碼成Base32:這是從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; 
} 
相關問題