Grails 1.1以后在Strings上有'encodeAsMD5' - 有没有办法为函数提供盐?
典型用法:
${myString.encodeAsMD5()}
另一种选择是使用Apache DigestUtils类。
我没有使用它来进行密码散列 - 相反,我正在使用它来验证机制,以确定何时创建请求以及收到响应时经过了多长时间。
首先,我加密最初创建请求的日期/时间并将其传递给客户端。稍后当客户端发回一些数据时,它会包含原始哈希值,然后用于确定已经过了多长时间。
答案 0 :(得分:3)
您是否想要加盐,因为您正在尝试进行密码哈希?如果是这样,请考虑jBCrypt,一个安全,易于使用的密码哈希库。您可以轻松地将其作为Groovy字符串元方法挂钩。 :-P
如果您没有进行密码哈希,我不确定盐会在哪里进来;请随意详细说明。 : - )
如何使用HMAC进行键控哈希示例(我在我的示例中使用了HmacMD5
,但您可以使用HmacSHA1
,HmacSHA256
,HmacSHA384
或{{ 1}}}):
HmacSHA512
我很抱歉这是Java,而不是Groovy,但希望你能够轻松适应。 :-)无论如何,在这个例子中,你的常量值将是关键,传入的数据将是数据。
如果您的数据相当大(不太可能来自您所描述的内容),您可以多次调用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();
}
,并且哈希工作就像这些调用中的数据全部连接在一起一样。
答案 1 :(得分:0)
你不能使用MessageDigest(Example)吗?您必须缓存原始时间戳/哈希,或者更好的是,将入站和出站传输存储在某种审核表中。