文字列を16進数でエンコードしてから、再度文字列に変換しようとしています。この目的のために、Apache 共通コーデックを使用しています。特に、次のメソッドを定義しました。
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
public String toHex(byte[] byteArray){
return Hex.encodeHexString(byteArray);
}
public byte[] fromHex(String hexString){
byte[] array = null;
try {
array = Hex.decodeHex(hexString.toCharArray());
} catch (DecoderException ex) {
Logger.getLogger(SecureHash.class.getName()).log(Level.SEVERE, null, ex);
}
return array;
}
奇妙なことは、元に戻すときに同じ最初の文字列が得られないことです。さらに奇妙なことに、取得したバイト配列は、文字列の最初のバイト配列とは異なります。私が書いた小さなテストプログラムは次のとおりです。
String uno = "uno";
byte[] uno_bytes = uno.getBytes();
System.out.println(uno);
System.out.println(uno_bytes);
toHex(uno_bytes);
System.out.println(hexed);
byte [] arr = fromHex(hexed);
System.out.println(arr.toString());
出力の例は次のとおりです。
uno #initial string
[B@1afe17b #byte array of the initial string
756e6f #string representation of the hex
[B@34d46a #byte array of the recovered string
また、別の奇妙な動作があります。バイト配列 ([B@1afe17b) は固定ではなく、コードの実行ごとに異なりますが、その理由がわかりません。