加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala单行从字符串生成MD5哈希

发布时间:2020-12-16 18:34:37 所属栏目:安全 来源:网络整理
导读:我是 Scala的新手,我发现这个有趣的单线程从字符串生成十六进制编码的MD5哈希.我希望有人能帮助我更好地理解这一点. private def getMd5(inputStr: String): String = { val md: MessageDigest = MessageDigest.getInstance("MD5") md.digest(inputStr.getBy
我是 Scala的新手,我发现这个有趣的单线程从字符串生成十六进制编码的MD5哈希.我希望有人能帮助我更好地理解这一点.

private def getMd5(inputStr: String): String = {
  val md: MessageDigest = MessageDigest.getInstance("MD5")
  md.digest(inputStr.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft("") {_ + _}
}

谢谢.

解决方法

它只是这个java代码的模拟,但没有StringBuilder(这取决于你)

MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
    String password = "secret";
    messageDigest.update(password.getBytes());
    byte[] bytes = messageDigest.digest();
    StringBuilder stringBuilder = new StringBuilder();
    for (byte aByte : bytes) {
        stringBuilder.append(Integer.toString((aByte & 0xff) + 0x100,16).substring(1));
    }
    System.out.println(stringBuilder.toString());

让我们考虑第二行:

md.digest(inputStr.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft("") {_ + _}

> md.digest(inputStr.getBytes())—-从String获取字节
> md.digest(inputStr.getBytes()).map(0xFF& _)— bitwise&与每个数组项(map返回一个新数组)
> md.digest(inputStr.getBytes()).map(0xFF&).map {“?x”.format()}映射每个项目的格式.
> md.digest(inputStr.getBytes()).map(0xFF&).map {“?x”.format()} .foldLeft(“”){_ _}这是典型的折叠,在我们的例子中从左边开始和init值“”,(如果它对你来说更容易,它是上面例子中StringBuilder的“远”模拟).我建议你阅读scala中的fold,reduce等操作.例如https://coderwall.com/p/4l73-a/scala-fold-foldleft-and-foldright

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读