md5和盐

时间:2010-02-03 01:06:05

标签: java grails groovy

Grails 1.1以后在Strings上有'encodeAsMD5' - 有没有办法为函数提供盐?

典型用法:

${myString.encodeAsMD5()}

另一种选择是使用Apache DigestUtils类。

我没有使用它来进行密码散列 - 相反,我正在使用它来验证机制,以确定何时创建请求以及收到响应时经过了多长时间。

首先,我加密最初创建请求的日期/时间并将其传递给客户端。稍后当客户端发回一些数据时,它会包含原始哈希值,然后用于确定已经过了多长时间。

2 个答案:

答案 0 :(得分:3)

您是否想要加盐,因为您正在尝试进行密码哈希?如果是这样,请考虑jBCrypt,一个安全,易于使用的密码哈希库。您可以轻松地将其作为Groovy字符串元方法挂钩。 :-P

如果您没有进行密码哈希,我不确定盐会在哪里进来;请随意详细说明。 : - )


如何使用HMAC进行键控哈希示例(我在我的示例中使用了HmacMD5,但您可以使用HmacSHA1HmacSHA256HmacSHA384或{{ 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)

你不能使用MessageDigestExample)吗?您必须缓存原始时间戳/哈希,或者更好的是,将入站和出站传输存储在某种审核表中。