2015-11-17 3 views
-1

Я нашел эту функцию Java, которая шифрует строку в MD5, но я не понимаю, как это работает:Функция Java MD5: может кто-нибудь объяснить мне этот код?

public static String makeMD5(String text){ 
    MessageDigest md; 
    try { 
     md = MessageDigest.getInstance("MD5"); 

     md.update(text.getBytes()); 
     byte byteData[] = md.digest(); 
     StringBuffer sb = new StringBuffer(); 
     for (int i = 0; i < byteData.length; i++) 
      sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); 

     text = sb.toString(); 
     return text; 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

Я не понимаю линию только после того, как цикл ..

Большое спасибо!

+0

'текст = sb.toString()' 'преобразует объект StringBuffer' в его' Строковое представление. –

+0

Для получения дополнительной информации перейдите к [link] (http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html) – Abdelhak

ответ

0

Линия после цикла for является откровенно сложным способом преобразования массива байтов в шестнадцатеричный. Эквивалент, более простой подход может быть

sb.append(String.format("%02x", b & 0xff)); 

, хотя, если вы можете использовать сторонние библиотеки существуют более простые решения. How to convert a byte array to a hex string in Java? имеет ряд предложений.

(Если сторонние библиотеки являются доступными, гуава позволит вам сделать весь этот метод в одной строке Hashing.md5().hashString(text, Charset.defaultCharset()).toString().)

Смежные вопросы