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

这是我的理解:

  • 哈希是一种单向算法;无法逆转
  • 混淆与加密类似,但不需要任何“秘密”即可理解(ROT13 就是一个例子)
  • 加密是可逆的,但需要“秘密”才能做到这一点
有帮助吗?

解决方案

散列是一种基于较大数据块创建半唯一密钥的技术。在给定的哈希中,您最终会发生“冲突”(例如两个不同的数据计算出相同的哈希值),当您这样做时,您通常会创建更大的哈希键大小。

混淆通常涉及尝试删除有用的线索(即有意义的变量/函数名),删除空格使内容难以阅读,并且通常以令人费解的方式做事,使跟踪正在发生的事情变得困难。它不像“真正的”加密那样提供严格的安全级别。

加密可以遵循多种模型,其中一种是“秘密”方法,称为私钥加密,其中双方都有一个秘密密钥。公钥加密使用共享单向密钥进行加密,并使用私有接收者密钥进行解密。使用公钥,只有接收者需要知道秘密。

其他提示

这是一个高层次的解释。我会尝试完善它们:

哈希 - 在完美的世界中,它是一个随机的预言。对于相同的输入 X,您总是收到相同的输出 Y,这与 X 没有任何关系。这在数学上是不可能的(或者至少未经证明是可能的)。我们得到的最接近的是陷门函数。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是明文。

A 散列 是一个 单向算法 习惯于 将输入与参考进行比较,而不影响参考。

它通常用于登录来比较密码,如果您使用信用卡购物,您也可以在收据上找到它。在那里你会找到你的信用卡号码,其中隐藏了一些号码,这​​样你就可以证明 具有高概率 你的卡被用来购买东西,而有人在你的垃圾中搜索将无法找到你的卡的号码。

一个非常天真的和简单的哈希是 “字符串的前 3 个字母”。这意味着“abcdefg”的哈希值将是“abc”。这个函数显然不能逆转,这就是哈希的全部目的。但是,请注意“abcxyz”将具有完全相同的哈希值,这称为 碰撞. 。再说一遍:A hash只是以一定概率证明两个比较值相同.

另一个非常天真的和简单的哈希是数字的 5 模,在这里你会看到 6,11,16 等。都将具有相同的哈希值:1.

现代哈希算法旨在尽可能减少冲突次数,但永远无法完全避免冲突。经验法则是:哈希值越长,冲突就越少。

混淆 在密码学中是对输入数据进行编码 它被散列或加密。

这使得暴力攻击变得不太可行,因为确定正确的明文变得更加困难。

我一直都是这么看的。

  • Hashing使用集合算法从另一个值派生值。根据所使用的算法,这可能是一种方式,也可能不是。

  • 混淆正在使符号更换更难阅读。

  • 加密类似于散列,只不过该值取决于您为算法提供的另一个值。

这是一个不错的高级描述。以下是一些额外的注意事项:

散列通常将大量数据减少到更小的大小。例如,这对于验证文件的内容非常有用,而无需比较两个副本。

加密涉及存储一些秘密数据,而秘密数据的安全性取决于保持单独的“密钥”免受坏人的侵害。

混淆是在没有单独密钥(或使用固定密钥)的情况下隐藏一些信息。在这种情况下,对方法保密就是保证数据安全的方法。

由此,您可以了解哈希算法如何用于数字签名和内容验证、如何使用加密来保护文件和网络连接,以及为什么将混淆用于数字版权管理。

简短回答:

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

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

加密 - 使用密钥来转换数据,以便只有拥有正确密钥的人才能理解它。加密后的数据可以被解密得到原始数据。典型的标准有 DES、TDES、AES、RSA 等。

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

  • 散列是从一个值创建另一个值的单向任务。该算法应尝试创建一个尽可能短且尽可能唯一的值。

  • 混淆是指在不改变语义的情况下使某些内容变得不可读。它涉及到值转换、删除空格等。某些形式的混淆也可能是单向的,因此无法获得起始值

  • 加密是双向的,并且总是有一些解密以相反的方式进行。

所以,是的,你基本上是正确的。

混淆是隐藏或使某些内容更难理解。

散列获取输入,通过函数运行它,并生成可以作为输入引用的输出。它不一定是唯一的,函数可以为不同的输入生成相同的输出。

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

混淆只是通过引入技术来迷惑某人,使某些事情变得更难理解。代码混淆器通常通过重命名事物来删除变量或方法名称中任何有意义的内容来实现此目的。它与加密不同,无需解密即可使用任何内容。

通常,散列和加密之间的区别在于,散列通常仅采用公式将数据转换为另一种形式,而加密则使用需要密钥来加密/解密的公式。例如,base 64 编码是一种哈希算法,其中 md5 是一种加密算法。任何人都可以解散 Base64 编码的数据,但如果没有密钥则无法解加密 md5 加密的数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top