【问题标题】:Computing the MD5 hash of a string in scala [duplicate]在scala中计算字符串的MD5哈希[重复]
【发布时间】:2011-08-24 23:12:56
【问题描述】:

可能重复:
Generate MD5 hash in Java

嗨,

我想在我的 Scala 代码中计算一个字符串的 MD5 哈希值。除了常规的 java.security.MessageDigest 方式之外,我可以使用任何 scala 或 java 库来快速执行此操作吗?

请帮忙 谢谢

【问题讨论】:

  • 为什么不能使用 java.security.MessageDigest?只需将其包装在一个公共静态函数中以减少 Scala 中的混乱?
  • 你不想使用MessageDigest的原因是什么?
  • net.liftweb.util.Helpers.md5(str) – 当然,只有在您已经在某处使用 liftweb 时才有意义……
  • @Debilski:该函数只是再次调用 MessageDigest
  • @Goran Jovic 当然可以。为什么要再次实现那个功能?

标签: java scala


【解决方案1】:

您可能在这里重新发明了一个非常小的轮子,但只需编写一个函数来做您想做的事情:获取一个字符串,使用 MessageDigest,然后返回您需要的任何内容(十六进制字符串、字节数组)。

import java.security.MessageDigest

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

md5("Hello")

附:我不写 Scala,但这是可行的,它留给读者作为练习,把它变成 Array[Byte] 以外的任何东西

【讨论】:

  • @Debilski 摘要中的字节在用于创建字符串时作为字符本身是无意义的。有人通常想将它们格式化为十六进制数字......我知道在 Clojure 中这就像(apply str (map #(format "%02x" %) bytes))
  • @Debilksi 我不认为第一个map(0xFF & _) 是必要的,只需.map("%02X".format(_)).mkString
  • 以下是创建所有语言的 md5 字符串的一些要点:gist.github.com/amscotti/2467512
  • 我是来找这个的:def md5Hash(text: String) : String = java.security.MessageDigest.getInstance("MD5").digest(text.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft(""){_ + _}
  • 这里是完整的扩展方法,可以作为"testString".hash import java.security.MessageDigest object StringExtensions { implicit class RichString(val str: String) extends AnyVal { def hash: String = MessageDigest.getInstance("MD5").digest(str.getBytes).map("%02X".format(_)).mkString + "-" + str } }
猜你喜欢
  • 2012-07-12
  • 2011-12-20
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2011-12-08
  • 2011-06-14
  • 2012-10-10
相关资源
最近更新 更多