我看到哈希和加密算法之间有很多混淆,我想听到一些关于以下方面的专家建议:
什么时候使用哈希和加密 是什么让哈希或加密算法不同(从理论/数学层面) 例如,是什么使得哈希不可逆(没有彩虹树的帮助)
以下是一些类似的SO问题,但没有像我想要的那样详细:
混淆、哈希和加密之间的区别是什么? 加密和哈希的区别
我看到哈希和加密算法之间有很多混淆,我想听到一些关于以下方面的专家建议:
什么时候使用哈希和加密 是什么让哈希或加密算法不同(从理论/数学层面) 例如,是什么使得哈希不可逆(没有彩虹树的帮助)
以下是一些类似的SO问题,但没有像我想要的那样详细:
混淆、哈希和加密之间的区别是什么? 加密和哈希的区别
当前回答
当你不想返回原始输入时,使用哈希,当你想要返回原始输入时,使用加密。
哈希表获取一些输入并将其转换为一些位(通常被认为是一个数字,如32位整数,64位整数等)。相同的输入总是会产生相同的散列,但是在这个过程中你主要会丢失信息,所以你不能可靠地重现原始输入(但是有一些注意事项)。
加密主要保留了您输入到加密函数中的所有信息,只是使任何人在不拥有特定密钥的情况下很难(理想情况下不可能)逆转到原始输入。
哈希的简单例子
这里有一个简单的例子来帮助您理解为什么哈希(在一般情况下)不能返回原始输入。假设我要创建一个1位哈希。我的哈希函数接受一个比特字符串作为输入,如果输入字符串中设置了偶数位,则将哈希值设置为1,如果输入字符串中设置了奇数位,则设置为0。
例子:
Input Hash
0010 0
0011 1
0110 1
1000 0
注意,有许多输入值的哈希值为0,也有许多输入值的哈希值为1。如果你知道哈希值是0,你就不能确定原始输入是什么。
顺便说一下,这个1位哈希并不是完全人为的…看看奇偶校验位。
加密的简单例子
你可以通过使用简单的字母替换来加密文本,比如如果输入是a,你就写B。如果输入是B,你就写c。一直到字母表的末尾,如果输入是Z,你又写a。
Input Encrypted
CAT DBU
ZOO APP
就像简单的哈希示例一样,这种类型的加密在历史上也被使用过。
其他回答
哈希函数可以看作是烤一条面包。你从输入(面粉、水、酵母等)开始,在应用哈希函数(混合+烘焙)后,你最终会得到一个输出:一条面包。
另一种方法是非常困难的——你不能真正地把面包分成面粉、水和酵母——其中一些在烘焙过程中丢失了,你永远无法确切地说出某条面包使用了多少水、面粉或酵母,因为这些信息被哈希函数(又名烤箱)破坏了。
从理论上讲,许多不同的输入变体将生产相同的面包(例如,2杯水和1茶匙酵母生产的面包与2.1杯水和0.9茶匙酵母生产的面包完全相同),但给定其中一个面包,你无法确切地说出哪种输入组合生产了它。
另一方面,加密可以被看作是一个保险箱。不管你放进去什么,只要你有一开始锁进去的钥匙,它就会出来。这是一个对称运算。给定一个键和一些输入,就会得到一个特定的输出。给定这个输出和相同的键,您将得到原始的输入。这是一个1:1的映射。
我的两句台词……面试官一般想要以下答案。
哈希是一种方法。您不能将数据/字符串从哈希代码转换。
加密是两种方式-如果你有密钥,你可以再次解密加密的字符串。
对称加密:
对称加密也可以称为共享密钥或共享秘密加密。在对称加密中,一个密钥同时用于加密和解密流量。
非对称加密:
非对称加密也称为公钥加密。非对称加密与对称加密的主要区别在于使用两个密钥:一个用于加密,一个用于解密。最常用的非对称加密算法是RSA。
与对称加密相比,非对称加密施加了很高的计算负担,并且往往要慢得多。因此,它通常不用于保护有效负载数据。相反,它的主要优势在于能够在不安全的媒介(例如Internet)上建立安全通道。这是通过交换公钥来完成的,而公钥只能用于加密数据。互补私钥(从不共享)用于解密。
散列:
最后,哈希是一种不同于加密的加密安全形式。加密是一个两步过程,用于首先加密消息,然后解密消息,而哈希将消息压缩为不可逆的固定长度值或哈希。网络中最常见的两种哈希算法是MD5和SHA-1。
更多信息请点击:http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/
加密和哈希算法的工作原理类似。在每种情况下,都需要在比特之间制造混乱和扩散。简而言之,混淆是在密钥和密文之间创建一个复杂的关系,扩散是在传播每个比特的信息。
许多哈希函数实际上使用加密算法(或加密算法的原语)。例如,SHA-3候选Skein使用threfish作为底层方法来处理每个块。不同之处在于,它们不是保留每个密文块,而是破坏性地、确定性地合并在一起,形成固定的长度
你已经得到了一些很好的答案,但我猜你可以这样看: 加密: 如果你有正确的密钥,加密必须是可以解密的。
例子: 就像你发电子邮件一样。 您可能不希望世界上每个人都知道您正在给接收电子邮件的人写什么,但接收电子邮件的人可能希望能够阅读它。
散列: 哈希的工作原理类似于加密,但它不应该能够反转它。
例子: 就像你把钥匙插进一扇锁着的门里(就是那种你关门时就会锁上的门)。你不需要关心锁的具体工作原理,只要在你使用钥匙时它能自己解锁就行了。如果出现问题,你可能无法修复它,不如换一个新锁。(就像每次登录都会忘记密码一样,至少我一直都这样做,这是使用哈希的常见领域)。
... 我猜在这种情况下,你可以把彩虹算法称为锁匠。
希望事情好转=)