(base64_encode) 哈希和 (sha1, md5, ...) 方式之间的主要区别是什么? base64_encode 是可解码的方式,但其他方式似乎不是。这是他们的主要区别吗?
是的,主要区别在于。 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"
Base64 编码和哈希(sha1 等)是不同的概念。
它们都会将数据转换为另一种格式。
编码是可逆的,散列则不可逆。
Endoding 使用公共算法转换数据,因此可以轻松反转数据。
散列可以保持数据的完整性。
...然后是加密:)
希望有帮助
Base64 编码:
这是一个将二进制数据转换为 ASCII 字符串格式的可逆过程。它主要用于数据表示和传输,确保二进制数据在传输过程中保持完整。它不提供任何形式的安全性。
哈希(SHA-1、MD5等):
这是一种将数据转换为固定大小的哈希值的单向过程。它被设计为不可逆的,这意味着您无法从哈希值中检索原始数据。哈希函数确保即使输入中发生很小的变化也会产生明显不同的哈希值,这使其对于验证数据完整性和安全存储密码非常有用。