【问题标题】:Running a Hash through an MD5 hashing algorithm通过 MD5 散列算法运行散列
【发布时间】:2014-06-04 16:25:41
【问题描述】:

我是散列新手,我希望能够通过 MD5 散列运行散列以产生唯一值。目前我只是将 Hash 转换为字符串,然后通过 MD5 算法运行它。

这是执行此操作的好方法,还是有更好的方法来使用 MD5 加密哈希?

为了澄清我正在尝试为没有唯一 id 的对象创建缓存键,因此我尝试使用哈希来创建 id。

【问题讨论】:

  • 小心加密这个词,被加密的东西可以被解密。没有办法得到只有像 MD5 这样的校验和的原始包。
  • @Sqeaky MD5 可以反向它是一个弱散列算法,例如看google search,如果你想要一个不可逆的散列算法,OP bcrypt 似乎是新的热点
  • 你真正想要完成什么?
  • 更新了我的问题以澄清我想要做什么
  • @bjhaid 反转弱加密哈希并不意味着数据是可恢复的。一个 MD5 哈希只有 128 位,但我可以 MD5sum 一个 20gb 的文件。弱散列是一种可以使无效数据具有与实际有效数据相同的校验和的散列。例如:我可以在操作系统安装光盘映像中安装病毒,然后在几个小时的时间里,我可以使我的恶意操作系统光盘具有与有效光盘相同的校验和。加密哈希努力使这种攻击在计算上达到不可能的地步。

标签: ruby algorithm hash md5


【解决方案1】:

Ruby 哈希内置支持 Murmur3 哈希。如果您致力于 md5 哈希,那么使用它将不起作用。如果您可以使用它,那么只需从 Object 类 (http://ruby-doc.org/core-2.1.1/Object.html#method-i-hash) 中调用 .hash 方法。

pry(main)> {}.hash
=> 0
pry(main)> {:a => "b"}.hash
=> 2051585302280555993
pry(main)> "foo".hash
=> -2886254516463342771

Murmur3 哈希比 md5 更快,但可能不适合加密用途。如果您必须使用 MD5,我看不出散列字符串根本不好的理由。如果需要,它甚至可以轻松地用 Ruby 以外的语言重新创建相同的哈希,因为它将实现与 Ruby 的内部二进制格式分开。

如果您必须使用加密哈希但未提交 MD5,请使用 BCrypt、SHA1 或 SHA256。 MD5 是可逆的,不适合保护数据。

编辑:细节和语法

【讨论】:

  • 当涉及加密原语时,请不要像这样从臀部射击。
  • 这个问题似乎是关于算法而不是加密。如果是关于加密的,当 TheDelChop 阅读我的答案时,如果他负责,他会进行自己的研究,或者会问为什么 MD5 不好,我们可以进行真正的讨论。如果他不负责任,那么使用更好算法的建议就是我可能完成的全部好事。
  • 出现我休息一下。
  • 这不是关于加密,而是关于从哈希创建唯一的缓存密钥。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2018-10-17
  • 1970-01-01
  • 2013-08-29
  • 2013-07-22
  • 2014-11-18
相关资源
最近更新 更多