A: Это правильный способ сделать это?
Нет, четыре причины:
1) Вы используете кодировку символов по умолчанию, вместо того, чтобы указать конкретную кодировку. Я бы рекомендовал использовать UTF-8.
2) Вы используете длину строки в символов, чтобы определить, сколько байтов использовать
3) Если вы хотите, отдельные дайджесты (по одному на каждой строке), то вы должны использовать отдельные MessageDigest
для каждого из них, или позвонить reset
между звонками
4) На данный момент вы ничего не делаете с дайджестами.
Я предлагаю вам извлечь «MD5 строки в определенной кодировке» в отдельный метод:
public static byte[] getMd5OfUtf8(String text) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
return digest.digest(text.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException("No MD5 implementation? Really?");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException("No UTF-8 encoding? Really?");
}
}
Тогда вы можете назвать это для каждого из элементов списка вы заинтересованы в - это не ясно, что вы пытаетесь сделать do с последующими дайджестами, но вы, вероятно, захотите их отдельно ...
EDIT: Как отмечено в комментариях, MD5 действительно не является отличным выбором в эти дни. Что-то вроде SHA-256 с солью было бы лучше, но для реальных защищенных приложений вы, вероятно, должны прочитать некоторую современную литературу по этой теме. (Я не эксперт, поэтому не хочу звучать слишком авторитетно.)
Вы должны использовать bcrypt или scrypt или PBKDFv2. – SLaks