2010-02-03 3 views
1

Grails 1.1 on имеет «encodeAsMD5», доступный на Strings - есть ли способ обеспечить соль для этой функции?md5 и соль

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

${myString.encodeAsMD5()} 

Другим вариантом было бы использовать класс Apache DigestUtils.

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

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

ответ

3

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

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


Пример того, как использовать 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

Я обновил свой вопрос, чтобы уточнить. Не использовать это для хэширования паролей. –

+1

@Robin: Исходя из вопроса о редактировании вопроса, могу ли я считать, что «соль» здесь относится к отметке времени, которую вы отправляете клиенту, которую вы ожидаете, чтобы отправить обратно дословно? –

+0

Если это так, один из способов проверить хэш - использовать что-то вроде HMAC-MD5 и использовать вашу метку времени как ключ HMAC. –

0

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

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