2010-02-03 5 views
1

Grails 1.1 a partir « encodeAsMD5 » disponible sur les chaînes - est-il un moyen de fournir un sel pour la fonction?md5 et le sel

Utilisation typique:

${myString.encodeAsMD5()} 

Une autre option serait d'utiliser la classe Apache DigestUtils. Je n'utilise pas cela pour faire un hachage de mot de passe - à la place, je l'utilise pour un mécanisme de vérification afin de déterminer quand une demande a été créée et combien de temps s'est écoulé quand la réponse a été reçue.

Pour commencer, je chiffrer la date/heure du moment où une demande a été initialement créé et de le transmettre au client. Plus tard, lorsque le client renvoie des données, il inclut la valeur de hachage d'origine qui est ensuite utilisée pour déterminer combien de temps s'est écoulé.

Répondre

3

Êtes-vous désireux d'avoir un sel parce que vous essayez de faire hashing mot de passe? Si c'est le cas, considérez s'il vous plaît jBCrypt, une bibliothèque de hachage de mot de passe sécurisée, vraiment facile à utiliser. Vous pouvez probablement l'accrocher facilement en tant que métaméthode de chaîne Groovy. :-P

Et si vous ne faites pas de mot de passe hashing, je ne suis pas sûr où un sel viendrait; N'hésitez pas à élaborer dans ce cas. :-)


Exemple de comment utiliser HMAC pour faire hash claveté (je HmacMD5 dans mon exemple, mais vous pouvez utiliser HmacSHA1, HmacSHA256, HmacSHA384 ou HmacSHA512 aussi):

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(); 
} 

Je suis désolé que ce soit en Java et non Groovy, mais j'espère que ce sera assez facile pour vous de vous adapter. :-) De toute façon, dans cet exemple, votre valeur constante serait la clé, et les données entrantes seraient les données.

Si vos données sont assez importantes (peu probable de ce que vous avez décrit), vous pouvez appeler update plusieurs fois, et le hachage fonctionnera comme si les données de ces appels étaient toutes concaténées ensemble.

+0

J'ai mis à jour ma question pour clarifier. Ne pas utiliser cela pour le hachage de mot de passe. –

+1

@Robin: En fonction de l'édition de votre question, dois-je considérer que le «sel» fait ici référence à l'horodatage que vous envoyez au client, que vous attendez qu'il renvoie textuellement? –

+0

Si oui, une façon de vérifier le hachage est d'utiliser quelque chose comme HMAC-MD5, et d'utiliser votre horodatage comme clé HMAC. –

0

Tu ne peux pas utiliser MessageDigest (Example)? Vous devrez mettre en cache l'horodatage/hash d'origine, ou mieux encore, stocker les transmissions entrantes et sortantes dans une sorte de table d'audit.