base64_encode散列和(sha1,md5,...)之间的主要区别是什么?

时间:2014-07-31 11:50:48

标签: encryption hash

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

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

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

  

编码是可逆的,哈希不是。

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

哈希保留了数据的完整性。

...然后有加密:)

希望有所帮助