вычислить хэш md5 для данных из нескольких частей (несколько строк) - PullRequest
12 голосов
/ 24 января 2011

Я пытаюсь создать [одиночный] хэш md5 из нескольких строк [в Java]. То есть я хочу

md5(string1, string2, string3, ..., stringN)

В настоящее время я пытаюсь объединить все строки с некоторым редко используемым разделителем, таким как #. Это

md5(string1#string2#...#stringN)

Это выглядит странно, и меня беспокоит какая-то странная строка, в которой фактически есть разделитель. Каков наилучший способ сделать это?

Ответы [ 11 ]

1 голос
/ 13 ноября 2013

Вы можете использовать класс MessageDigest для генерации вашего кода.Если бы я был вами, если бы на этапе предварительной обработки я знал длину каждой строки, я бы передал их как уникальную строку.Если строки, которые вы передаете, имеют разные случайные длины, которые не могут быть известны, я бы хэшировал их одну за другой, но мне нужно знать, хорошо ли синхронизированы исходная сущность и сущность получения, чтобы знать длину сообщенийпроходя между собой.

private static final char[] HEXADECIMAL = { '0', '1', '2', '3',
    '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

public  String hash(String stringToHash)  {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(stringToHash.getBytes());
        StringBuilder sb = new StringBuilder(2 * bytes.length);
        for (int i = 0; i < bytes.length; i++) {
            int low = (int)(bytes[i] & 0x0f);
            int high = (int)((bytes[i] & 0xf0) >> 4);
            sb.append(HEXADECIMAL[high]);
            sb.append(HEXADECIMAL[low]);
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        //exception handling goes here
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...