Ответ 1
String s="f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e";
byte[] b = new BigInteger(s,16).toByteArray();
Я использую следующую функцию в Java для преобразования зашифрованной строки в шестнадцатеричный формат:
public static String toHex(byte [] buf) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10) {
strbuf.append("0");
}
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
Теперь я хочу преобразовать эту шестнадцатеричную строку обратно в массив байтов. Как я могу это сделать?
Например,
(1) Plain Text = 123
(2) Encrypted Text = «h>kq*«¬Mí"~èåZ \}?
(3) Encrypted Text in Hex = f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e
Я могу перейти от (2)
до (3)
, но как перейти от (3)
назад к (2)
?
String s="f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e";
byte[] b = new BigInteger(s,16).toByteArray();
Принятый ответ не учитывает ведущие нули, которые могут вызвать проблемы
Этот вопрос отвечает на него. В зависимости от того, хотите ли вы посмотреть, как это делается или просто использовать встроенный метод java. Вот решения, скопированные из этого и this соответственно отвечают из упомянутого вопроса SO.
Вариант 1: Утилитный метод
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;
}
Вариант 2: встроенный модуль с одним слоем
import javax.xml.bind.DatatypeConverter;
public static String toHexString(byte[] array) {
return DatatypeConverter.printHexBinary(array);
}
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
Я обнаружил, что DatatypeConverter.parseHexBinary более дорогостоящий (два раза), чем:
org.apache.commons.codec.binary.Hex(str.toCharArray())