2011-09-10 37 views
10

如何將十六進制字符串轉換爲base64?我發現這個頁面http://home2.paulschou.net/tools/xlate/,但我需要在java中的一些功能:String base64 = ...decoder(String hex);我在互聯網上發現了一些東西,但他們很難並使用字節數組。我正在尋找更簡單的東西 thx很多如何將十六進制轉換爲base64

+0

你可能會(無論你知道與否)來轉換十六進制字節,然後字節回到base64。 –

回答

18

看一看Commons Codec

byte[] decodedHex = Hex.decodeHex(hex); 
byte[] encodedHexB64 = Base64.codeBase64(decodedHex); 
1

你不可能找到直接從十六進制轉換爲base-64的東西。您需要查找或寫入十六進制解碼器和base-64編碼器,並使用byte[]作爲中間格式。

比較現實,你問什麼:

String b64 = encoder.encode(decoder.decode(hex)); /* Too difficult :(!!! */ 

String b64 = transcoder.transcode(hex);   /* So much simpler! */ 
1

你可能想看看這個代碼。我發現它在谷歌

import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

import sun.misc.BASE64Encoder; 

public class MD5 { 

    static char[] carr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 

    public static String getBase64FromHEX(String input) { 

     byte barr[] = new byte[16]; 
     int bcnt = 0; 
     for (int i = 0; i < 32; i += 2) { 
      char c1 = input.charAt(i); 
      char c2 = input.charAt(i + 1); 
      int i1 = intFromChar(c1); 
      int i2 = intFromChar(c2); 

      barr[bcnt] = 0; 
      barr[bcnt] |= (byte) ((i1 & 0x0F) << 4); 
      barr[bcnt] |= (byte) (i2 & 0x0F); 
      bcnt++; 
     } 

     BASE64Encoder encoder = new BASE64Encoder(); 
     return encoder.encode(barr); 
    } 

    public static synchronized String getMD5_Base64(String input) { 
     // please note that we dont use digest, because if we 
     // cannot get digest, then the second time we have to call it 
     // again, which will fail again 
     MessageDigest digest = null; 

     try { 
      digest = MessageDigest.getInstance("MD5"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

     if (digest == null) 
      return input; 

     // now everything is ok, go ahead 
     try { 
      digest.update(input.getBytes("UTF-8")); 
     } catch (java.io.UnsupportedEncodingException ex) { 
      ex.printStackTrace(); 
     } 
     byte[] rawData = digest.digest(); 
     BASE64Encoder bencoder = new BASE64Encoder(); 
     return bencoder.encode(rawData); 
    } 

    private static int intFromChar(char c) { 
     char clower = Character.toLowerCase(c); 
     for (int i = 0; i < carr.length; i++) { 
      if (clower == carr[i]) { 
       return i; 
      } 
     } 

     return 0; 
    } 

    public static void main(String[] args) { 

     //String password = args[0]; 
     String password = "test"; 

     MessageDigest digest = null; 

     try { 
      digest = MessageDigest.getInstance("MD5"); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 

     try { 
      digest.update(password.getBytes("UTF-8")); 
     } catch (UnsupportedEncodingException ex) { 
      ex.printStackTrace(); 
     } 

     byte[] rawData = digest.digest(); 
     StringBuffer printable = new StringBuffer(); 

     for (int i = 0; i < rawData.length; i++) { 
      printable.append(carr[((rawData[i] & 0xF0) >> 4)]); 
      printable.append(carr[(rawData[i] & 0x0F)]); 
     } 
     String phpbbPassword = printable.toString(); 

     System.out.println("PHPBB   : " + phpbbPassword); 
     System.out.println("MVNFORUM  : " + getMD5_Base64(password)); 
     System.out.println("PHPBB->MVNFORUM : " + getBase64FromHEX(phpbbPassword)); 
    } 

} 
0

首先,你必須導入阿帕奇共享編解碼器庫! https://commons.apache.org/proper/commons-codec/archives/1.9/index.html

下面是1.9版本 http://commons.apache.org/proper/commons-codec/archives/1.9/apidocs/index.html

的API然後,你必須遵循以下3個步驟

 //convert String to char array (1st step) 
     char[] charArray = myhexString.toCharArray(); 

     // decode the char array to byte[] (2nd step) 
     byte[] decodedHex = Hex.decodeHex(charArray); 

    // The String decoded to Base64 (3rd step) 
    String result= Base64.encodeBase64String(decodedHex); 
相關問題