2012年6月27日 星期三

byte array 與 hexadecimal 字串互相轉換

記錄這篇是因為加解密的結果會是 byte array,但是我的資料必須透過 HTTP 協定傳遞
所以必須把 byte array 轉換成字串,傳送出去之後還要能再轉回原本的 byte array 來解密。
根據 Encrypting and decrypting large data using Java and RSA 的建議
要把 byte array 轉成 hexadecimal 的字串,在網路上傳送才不容易有問題。

參考資料:
1、Converting A String To Hexadecimal In Java
2、How to convert Hex String to Bytes and viceversa in Java?

程式碼參考來源為上述的兩個參考資料的連結,程式碼內容如下:

public String byte2Hex(byte[] b) {
    String result = "";
    for (int i=0 ; i<b.length ; i++)
      result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
    return result;
}

public String string2Hex(String plainText, String charset) throws UnsupportedEncodingException {
    return String.format("%040x", new BigInteger(1, plainText.getBytes(charset)));
}

public byte[] hex2Byte(String hexString) {
  byte[] bytes = new byte[hexString.length() / 2];
  for (int i=0 ; i<bytes.length ; i++)
    bytes[i] = (byte) Integer.parseInt(hexString.substring(2 * i, 2 * i + 2), 16);
  return bytes;
}

public String hex2String(String hexString) {
    StringBuilder str = new StringBuilder();
    for (int i=0 ; i<hexString.length() ; i+=2)
        str.append((char) Integer.parseInt(hexString.substring(i, i + 2), 16));
    return str.toString();
}

這邊總共有四個方法,分別是將 string/hex 互轉以及 byte array/hex 互轉。

沒有留言: