混淆、散列和加密有什么区别?

37

混淆、哈希和加密的区别是什么?

这是我的理解:

  • 哈希是一种单向算法;不能被逆转
  • 混淆类似于加密,但不需要任何“秘密”来理解(ROT13是一个例子)
  • 加密是可逆的,但需要“秘密”才能实现
11个回答

34

哈希是一种基于较大数据创建半唯一(semi-unique)键的技术。在给定的哈希值中,最终会出现“碰撞”(即两个不同的数据片段计算得到相同的哈希值),当出现碰撞时,通常会创建更大的哈希键大小。

混淆通常涉及尝试去除有用提示(即有意义的变量/函数名称)、去除空格使内容难以阅读,并以繁琐的方式完成操作,使跟踪正在进行的操作变得困难。它不提供像“真正”的加密那样的高级别安全性。

加密可以遵循几个模型之一,其中之一是“秘密”方法,称为私钥加密,双方都拥有一个秘密密钥。公钥加密使用共享单向密钥进行加密和私人接收者密钥进行解密。对于公钥加密,只有接收者需要拥有密钥。


6
我会将它们归类为对称加密(共享秘钥)和非对称加密(公钥/私钥)。 - tvanfosson

12

那是一个高层次的解释。 我会尝试对其进行细化:

哈希 - 在完美世界中,它是一个随机预言机。 对于相同的输入X,您始终会收到与X无关的相同输出Y。 这在数学上是不可能的(或者至少尚未被证明)。 我们能够接近的最近方法是陷门函数。 H(X)= Y,其中H-1(Y)= X 非常难以实现,您最好尝试暴力破解Z,使得H(Z)= Y

混淆(我的观点) - 任何函数f,使得f(a)= b,其中您依赖于f保密性。 F可以是哈希函数,但“混淆”部分意味着通过安全性来实现模糊性。 如果您以前从未见过ROT13,则它将是混淆

加密 - Ek(X)= Y,Dl(Y)= X,其中E为所有人所知。 k和l是密钥,它们可以相同(在对称中,它们是相同的)。 Y是密文,X是明文。


2
我真的很喜欢这个答案。它指出了混淆是使用秘密算法,而加密是使用已知算法和秘密密钥。如果您同时进行加密和混淆,那么您将获得最高的安全性,因为所有已知的内容都变成了未知。 - srbrills

8
一个哈希算法是一种单向算法,用于比较输入和参考值而不泄露参考值。 它通常用于登录以比较密码,并且如果您使用信用卡购物,您也可以在收据上找到它。在那里,您会发现您的信用卡号码有一些数字被隐藏,这样您就可以证明高概率地使用了您的卡来购买物品,而搜索您的垃圾的人将无法找到您的卡号码。
一个非常简单和朴素的哈希是"字符串的前3个字母"。这意味着"abcdefg"的哈希将为"abc"。显然,此函数无法被反转,这就是哈希的全部目的。但是,请注意,"abcxyz"将具有完全相同的哈希,这称为冲突。因此,哈希只能证明两个比较的值相同的概率是一定的
另一个非常简单和朴素的哈希是数字的5模数,这里您会看到6、11、16等都具有相同的哈希值:1。
现代哈希算法旨在尽可能减少冲突数量,但永远无法完全避免。一个经验法则是:哈希越长,冲突越少。

3

混淆在密码学中是指在输入数据被哈希或加密之前进行编码。

这使得暴力破解攻击变得更加困难,因为很难确定正确的明文。


3
这并不是一个糟糕的高层描述。以下是一些额外的考虑因素:
哈希通常将大量数据减少到较小的大小。例如,这对于验证文件内容而无需具有两个副本非常有用。
加密涉及存储一些机密数据,并且机密数据的安全性取决于保持单独的“密钥”安全。
混淆是在没有单独密钥(或固定密钥)的情况下隐藏某些信息。在这种情况下,保持方法的机密性是保护数据安全的方式。
由此,您可以看到哈希算法如何有助于数字签名和内容验证,加密如何用于保护您的文件和网络连接以及为什么混淆用于数字版权管理。

2

这是我一直以来的看法。

  • 哈希是使用一组算法从另一个值中派生出一个值。根据使用的算法,这可能是单向的,也可能不是。

  • 混淆是通过符号替换使某些内容更难读取。

  • 加密类似于哈希,但该值取决于您提供给算法的另一个值。


2
据我所知,哈希总是单向的。 - Graeme Perrow
加密就像哈希一样,只不过其值取决于您提供给算法的另一个值。这使得加密在除哈希之外的其他应用中也很有用。您能举些例子吗?也许可以在此主题的答案中查看@selwyn的回复。 - Stefan Verhagen

1

简短回答:

哈希 - 在某些数据上创建一个检查字段(以便检测数据何时被修改)。这是一种单向函数,原始数据无法从哈希中推导出来。典型的标准包括SHA-1、SHA256等。

混淆 - 修改您的数据/代码以混淆其他人(没有真正的保护)。这可能会丢失一些原始数据,也可能不会。这方面没有真正的标准。

加密 - 使用密钥转换数据,以便只有具有正确密钥的人才能理解它。加密数据可以解密以获取原始数据。典型的标准包括DES、TDES、AES、RSA等。


加密是一个陷门函数吗?而哈希是单向函数吗?http://mathworld.wolfram.com/TrapdoorOne-WayFunction.html - Stefan Verhagen

0

一切都好,除了混淆并不真正类似于加密 - 有时它甚至不涉及像 ROT13 这样简单的密码。


0

混淆是隐藏或使某物更难理解。

哈希将输入通过函数运行,并生成可以作为输入参考的输出。它不一定是唯一的,一个函数可以为不同的输入生成相同的输出。

加密以独特的方式将输入转换为输出。存在一对一的关系,因此不存在数据丢失或混淆的可能性 - 输出始终可以无歧义地转换回输入。


0
  • 哈希是从一个值生成另一个值的单向任务。算法应尽可能地创建一个尽可能短和独特的值。

  • 混淆是使某些东西难以阅读,而不改变语义。 它涉及值转换,去除空格等。 某些形式的混淆也可以是单向的,因此无法获取起始值

  • 加密是双向的,并且总有一些解密工作相反。

所以,是的,你大多数情况下是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接