SHA-256 байта конкатенации + строка + байт - PullRequest
0 голосов
/ 04 ноября 2011

1) если в PHP у меня есть этот код:

$var = "\x00\x23\x21\x11";

Как мне написать это утверждение в Java?

2) когда мне нужно объединить 3 типа переменных, два из этих байтов и строка, а затем получить дайджест SHA-256.

Я делаю

String all = varbyte1+varstr1+varbyte2;
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest(all.getBytes("UTF-8"));
String hash = String.format("%0" + (digest.length*2) + "X", new BigInteger(1, digest));

Это правильно?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Вы делаете это неправильно, как вы, вероятно, заметили бы, если бы посмотрели на all:

    String x = "meh";
    byte b = 39;
    byte c = 99;
    String y = b + x + c ;
    System.out.print(y);

отпечатки 39meh99. Я бы предложил использовать ByteArrayOutputStream и записать три части за три вызова в stream.write.

В общем, вы должны привыкнуть к тому, что строки в Java не являются байтовыми массивами, поскольку различие между char и byte довольно строго соблюдается, поэтому вы всегда должны думать о том, какую кодировку вы используете для преобразования между два.

0 голосов
/ 04 ноября 2011

Часть 1 Я могу ответить.

$var = "\\x00\\x23\\x21\\x11";

...