问题 SALT和KEY之间的区别。加密


好吧,所以我试着在我的java应用程序中学习加密消息。我刚刚发现SALT和KEY不一样。

有人能帮助我理解两者之间的区别是什么吗?


8467
2017-09-05 01:47


起源

在加密您打算稍后解密的邮件时,通常不会使用salt。它更像是用于散列类似用户密码的东西。盐基本上只是随机的“噪音”,你添加到密钥,以使结果哈希更安全。 - aroth


答案:


 粗略地说,相当于密码;您使用它来加密消息,然后使用相同的密钥将其解密回原始明文。 (好吧,一旦你有公钥和私钥,它会变得有点复杂,等等。)

一个  最常见的是加密 哈希 功能,而不是加密功能。我们的想法是,不是散列数据(例如密码),而是散列数据+ salt,其中salt通常是随机生成的字符串。他们(至少)有两个目的:

  • 阻止有权访问散列数据的攻击者识别a 碰撞 用一个 彩虹桌
  • 减慢正在尝试暴力攻击的攻击者。

12
2017-09-05 01:49



啊,好吧,我现在明白了,非常感谢你。基本上,密钥用于加密和解密,而盐与散列一起使用以使其更加安全。非常感谢你 :) - cody
一个重要的区别是,如果攻击者知道盐仍然可以实现其大部分目的。 - CodesInChaos
但是如果攻击者能够获得盐,那么它对他来说几乎是关键吗?他可以放开它。 - Mojimi
@mojimi - 请记住,对于一个好的哈希算法,“unhash”实际上意味着一些强制搜索冲突的变种。 - Oliver Charlesworth


 本质上是用于锁定原始内容的密码。

要使密码更难以进行逆向工程,可以添加一个  生成的加密。


举一个明显简单的例子,假设您要加密字符串。你的加密程序是颠倒这个词。 因此,对于字符串“Hello,World”,在运行加密后,您的字符串将是“dlroW,olleH”。 然后你可以添加盐。在这个例子中,盐将是“foo”,因此盐析后的结果将是“dlroW,olleHfoo”。 现在,如果有人设法对您的加密算法进行逆向工程,他们会得到“oofHello World”,这不是原始信息,因此您的信息仍然是安全的!

当你真的开始使用它 迭代加密,例如,
result = salt + encrypt(salt + encrypt(salt + encrypt(message)))。


3
2017-09-05 01:58



这不是盐的目的。 - Oliver Charlesworth