混淆,散列和加密有什么区别?
以下是我的理解:
答案 0 :(得分:29)
哈希是一种基于较大的数据创建半唯一键的技术。在给定的散列中,您最终会出现“冲突”(例如,两个不同的数据计算到相同的散列值),当您这样做时,通常会创建一个更大的散列键大小。
混淆通常涉及尝试删除有用的线索(即有意义的变量/函数名称),删除空格以使事情难以阅读,并且通常以复杂的方式处理事务以使得难以理解正在发生的事情。它没有像“真正的”加密那样提供严格的安全性。加密可以遵循几种模型,其中一种是“秘密”方法,称为私钥加密,其中双方都有密钥。公钥加密使用共享单向密钥进行加密,使用私有收件人密钥进行解密。使用公钥,只有收件人需要有秘密。
答案 1 :(得分:7)
这是一个高级别的解释。我会尝试改进它们:
哈希 - 在一个完美的世界里,它是一个随机的神谕。对于相同的输入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是明文。
答案 2 :(得分:6)
哈希是单向算法,用于将输入与引用进行比较而不会影响引用。
它通常用于登录以比较密码,如果您使用信用卡购物,也可以在您的reciepe上找到它。在那里你会发现你的信用卡号码隐藏了一些数字,这样你就可以证明具有高可行性你的卡用来购买东西,而搜索你垃圾的人将无法找到你的卡号。
一个非常天真和简单的哈希是“字符串的前三个字母”。 这意味着“abcdefg”的哈希将是“abc”。这个函数显然不能被反转,这是散列的全部目的。但请注意,“abcxyz”将具有完全相同的哈希值,这称为 collision 。所以再说一次:哈希只能证明两个比较值是相同的。
另一个非常天真和简单的哈希是数字的5模数,在这里你会看到6,11,16等......都将具有相同的哈希:1。
现代哈希算法旨在使碰撞次数尽可能低,但永远不能完全避免。经验法则是:哈希值越长,冲突越少。
答案 3 :(得分:3)
混淆是对输入数据进行编码进行哈希处理或加密。
这使得暴力攻击不太可行,因为更难确定正确的明文。
答案 4 :(得分:2)
这就是我一直以来的看法。
Hashing正在从中获取值 另一种,使用集合算法。根据使用的算法,这可能是单向的,可能不是。
混淆正在制造一些东西 更难用符号阅读 更换。
加密就像散列,但值取决于您提供算法的另一个值。
答案 5 :(得分:2)
这不是一个糟糕的高级描述。以下是一些其他注意事项:
散列通常会将大量数据减少到更小的尺寸。例如,这对于验证文件内容非常有用,而无需比较两个副本。
加密涉及存储一些秘密数据,秘密数据的安全性取决于保持一个单独的“密钥”安全与坏人。
混淆是在没有单独的密钥(或使用固定密钥)的情况下隐藏某些信息。在这种情况下,保密方法是保证数据安全的方法。
由此,您可以看到哈希算法如何对数字签名和内容验证有用,如何使用加密来保护您的文件和网络连接,以及为什么混淆用于数字版权管理。
答案 6 :(得分:1)
简要回答:
哈希 - 在某些数据上创建检查字段(以检测数据何时被修改)。这是单向函数,原始数据不能从散列中导出。典型的标准是SHA-1,SHA256等。
混淆 - 修改您的数据/代码以混淆其他任何人(没有真正的保护)。这可能会或可能不会丢失一些原始数据。没有真正的标准。
加密 - 使用密钥转换数据,以便只有具有正确密钥的人才能理解它。可以解密加密数据以获得原始数据。典型标准是DES,TDES,AES,RSA等。
答案 7 :(得分:0)
一切都很好,除了混淆与加密并不相似 - 有时它甚至不涉及像ROT13那样简单的密码。
答案 8 :(得分:0)
混淆隐藏或使某些事情难以理解。
Hashing接受输入,通过函数运行它,并生成可以作为输入引用的输出。它不一定是唯一的,函数可以为不同的输入生成相同的输出。
加密以独特的方式将输入转换为输出。存在一对一的相关性,因此没有潜在的数据丢失或混淆 - 输出总是可以转换回输入而没有歧义。
答案 9 :(得分:0)
哈希是从另一个创建一个值的单向任务。算法应该尝试创建尽可能短且唯一的值。
混淆是在不改变语义的情况下使某些东西变得难以理解。它涉及价值转换,删除空格等。某些形式的混淆也可能是单向的,因此无法获得起始值
加密是双向的,并且总是有一些解密工作相反。
所以,是的,你大多是正确的。
答案 10 :(得分:0)
混淆只是通过介入技巧使某人感到困惑而难以理解。代码混淆器通常通过重命名来删除变量或方法名称中的任何有意义的东西。它与加密类似,因为没有必要解密才能使用。
通常,散列和加密之间的区别在于散列通常只使用公式将数据转换为另一种形式,其中加密使用需要密钥加密/解密的公式。示例是base 64编码是散列算法,其中md5是加密算法。任何人都可以取消使用base64编码数据,但如果没有密钥,则无法解密md5加密数据。