MD5 и соль - PullRequest
       12

MD5 и соль

1 голос
/ 03 февраля 2010

В Grails 1.1 и далее в Strings доступен 'encodeAsMD5' - есть ли способ предоставить соль для функции?

Типичное использование:

${myString.encodeAsMD5()}

Другой вариант - использовать класс Apache DigestUtils.

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

Для начала я зашифровал дату / время первоначального создания запроса и передал его клиенту. Позже, когда клиент отправляет некоторые данные обратно, он включает исходное хеш-значение, которое затем используется для определения того, сколько времени прошло.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Вы хотите получить соль, потому что пытаетесь хешировать пароли? Если это так, рассмотрите jBCrypt , безопасную, действительно простую в использовании библиотеку хеширования паролей. Вы можете легко подключить его как метаметод Groovy-строки. : -Р

А если вы не хешируете пароль, я не уверен, куда соль может попасть; пожалуйста, не стесняйтесь уточнять в этом случае. : -)


Пример использования HMAC для хеширования по ключу (в моем примере я использовал HmacMD5, но вы также можете использовать HmacSHA1, HmacSHA256, HmacSHA384 или HmacSHA512):

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public byte[] hmacMD5(byte[] key, byte[] data) {
    Mac mac = Mac.getInstance("HmacMD5");
    mac.init(new SecretKeySpec(key, "HmacMD5"));
    mac.update(data);
    return mac.doFinal();
}

Извините, что это на Java, а не на Groovy, но, надеюсь, вам будет легко адаптироваться. :-) В любом случае, в этом примере ваше постоянное значение будет ключом, а входящие данные будут данными.

Если ваши данные имеют большой размер (маловероятно из того, что вы описали), вы можете вызывать update несколько раз, и хэш будет работать так, как если бы данные этих вызовов были объединены вместе.

0 голосов
/ 03 февраля 2010

Не можете ли вы использовать MessageDigest ( Пример )? Вам придется кэшировать исходную временную метку / хэш или, что еще лучше, хранить входящие и исходящие передачи в какой-то таблице аудита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...