Недавно я изучал несколько примеров MD5, чтобы начать понимать безопасность, и MD5 по большей части довольно прост для понимания и является хорошей отправной точкой, даже если он больше не защищен. Несмотря на это, у меня есть вопрос, касающийся высоких и слабых мест, когда дело доходит до преобразования строки в шестнадцатеричную строку.
Так что я знаю, что верхний и нижний полубайты равны половине байта или также могут быть шестнадцатеричными цифрами, которые представляют одну шестнадцатеричную цифру. Однако я не понимаю, как именно они работают и какова их цель. Я искал в Google, и я не могу найти много ответов, которые помогут объяснить, что они делают в контексте, в котором они находятся. Вот контекст конверсии:
private static String toHexString( byte[] byteArray )
{
final String HEX_CHARS = "0123456789ABCDEF";
byte[] result = new byte[byteArray.length << 1];
int len = byteArray.length;
for( int i = 0 ; i < len ; i++ )
{
byte b = byteArray[i]
int lo4 = b & 0x0F;
int hi4 = ( b & 0xF0 ) >> 4;
result[i * 2] = (byte)HEX_CHARS.charAt( hi4 );
result[i * 2 + 1] = (byte)HEX_CHARS.charAt( lo4 );
}
return new String( result );
}
Я не совсем понимаю, что происходит в заявлении for. Я был бы признателен за любую помощь в понимании этого, и если есть какая-то ссылка на некоторые места, где я могу узнать больше об этом, пожалуйста, также оставьте это.
Я понимаю базовое определение клев, но не операции и то, что делает присвоение числу 4.
Если мне нужно опубликовать полный пример кода, я просто спрошу, так как не уверен, если это необходимо.