【问题标题】:What is the main difference between base64_encode hashing and (sha1, md5, ...)?base64_encode 散列和 (sha1, md5, ...) 之间的主要区别是什么?
【发布时间】:2014-09-23 08:34:24
【问题描述】:

(base64_encode) 散列和 (sha1, md5, ...) 方法之间的主要区别是什么? base64_encode 是可解码的方式,但似乎其他方式不是。这是他们的主要区别吗?

【问题讨论】:

    标签: encryption hash


    【解决方案1】:

    是的,主要区别在于。 Base64 可解码,SHA1 和 MD5 不可解码。

    irb(main):001:0> source = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    
    irb(main):002:0> require "base64"
    => true
    irb(main):003:0> encoded = Base64.encode64(source)
    => "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp\nc2NpbmcgZWxpdC4=\n"
    irb(main):004:0> Base64.decode64(encoded)
    => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    

    另一个区别是哈希的长度。 Base64 编码字符串的长度会有所不同,因为它包含原始数据。但是 SHA1 和 MD5 哈希的长度是固定的(SHA1 为 20 字节,MD5 为 16 字节)。

    irb(main):001:0> source = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    
    irb(main):002:0> require "digest"
    => true
    irb(main):003:0> Digest::SHA1.hexdigest(source)
    => "e7505beb754bed863e3885f73e3bb6866bdd7f8c"
    irb(main):004:0> Digest::MD5.hexdigest(source)
    => "35899082e51edf667f14477ac000cbba"
    

    【讨论】:

      【解决方案2】:

      Base64 编码和散列(sha1 等)是不同的概念。

      它们都会将数据转换为另一种格式。

      编码是可逆的,散列是不可逆的。

      Endoding 使用公共算法转换数据,因此可以轻松反转。

      哈希保持数据的完整性。

      ...然后是加密:)

      希望有帮助

      【讨论】:

      • 一般来说,散列不会保持数据的完整性。例如,假设 h 是一个散列函数,使得 h(A) = 1 且 h(B) = 1。那么,如果我告诉你散列值为 1,你如何确定原始值是 A 还是 B ?散列是一种将较大的集合映射到较小的固定大小集合的方法。
      猜你喜欢
      • 2011-07-03
      • 2015-08-22
      • 2015-08-06
      • 2011-03-06
      • 2013-12-23
      • 2017-04-28
      • 2011-04-14
      • 2010-09-17
      • 2021-11-30
      相关资源
      最近更新 更多