在scala中计算字符串的MD5哈希值

37

可能是重复问题:
在Java中生成MD5哈希

你好,

我想在我的Scala代码中计算字符串的MD5哈希值。除了常规的java.security.MessageDigest方式之外,是否有任何Scala或Java库可以快速完成此操作?

请帮忙,谢谢。


6
为什么不能使用 java.security.MessageDigest?只需将其封装在一个公共静态函数中,以使 Scala 代码更简洁? - Karl-Bjørnar Øie
2
你不想使用MessageDigest的原因是什么? - Goran Jovic
1
net.liftweb.util.Helpers.md5(str) - 当然,这只有在您已经在某个地方使用liftweb时才有意义... - Debilski
2
当然会。为什么它要再次实现那个函数呢? - Debilski
import java.security.MessageDigest def getMD5Hash(myString: String): String = { val msgDigest:MessageDigest = MessageDigest.getInstance("MD5") val MD5Hash = msgDigest.digest(myString.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft("") {_ + _} MD5Hash } - Om Prakash
显示剩余2条评论
1个回答

78

你可能正在重新发明一个非常简单的轮子,但只需要编写一个函数来完成你想要的操作:接受一个字符串,使用MessageDigest,然后返回你所需的任何结果(十六进制字符串、字节数组)。

import java.security.MessageDigest

def md5(s: String) = {
    MessageDigest.getInstance("MD5").digest(s.getBytes)
}

md5("Hello")

顺便说一下,我不会写Scala,但是这个代码可行,读者可以自己尝试将其转换成除了Array[Byte]以外的任何类型。


3
@Debilski,摘要中的字节本身作为字符是毫无意义的,当用于创建一个字符串时。通常,有人希望将它们格式化为十六进制数字...我知道在Clojure中可以这样实现:(apply str (map #(format "%02x" %) bytes)) - John Cromartie
26
@Debilksi,我认为第一个map(0xFF & _)并不必要,可以简单地写成.map("%02X".format(_)).mkString - Alois Cochard
3
以下是创建各种编程语言中的MD5字符串的要点:https://gist.github.com/amscotti/2467512 - Guy Sopher
12
我来到这里是寻找下面这段代码的: def md5Hash(text: String) : String = java.security.MessageDigest.getInstance("MD5").digest(text.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft(""){_ + _} - Priyank Desai
2
这是完整的扩展方法,可以用作“testString”。hash`import java.security.MessageDigestobject StringExtensions { implicit class RichString(val str: String) extends AnyVal { def hash: String = MessageDigest.getInstance("MD5").digest(str.getBytes).map("%02X".format(_)).mkString + "-" + str }}` - AjitChahal
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接