SALT和KEY的区别。加密。

23

好的,所以我正在尝试学习如何在我的Java应用程序中加密消息。 我刚刚发现SALT和KEY不是同一个东西。

有人可以帮助我理解两者之间的区别吗?


2
在加密一条信息并打算稍后解密时,通常不会使用盐(salt)。盐更多地用于像用户密码这样的哈希操作中。盐基本上只是您添加到密钥中的随机“噪声”,以使生成的哈希更安全。 - aroth
2个回答

28
密钥粗略地说相当于密码;您使用它来加密消息,然后同样的密钥用于将其解密回原始纯文本。(好吧,一旦您拥有公钥和私钥等内容,情况会变得更加复杂。) 最常见于密码哈希函数而非加密函数。其想法是,不只是对数据(例如密码)进行哈希,而是对数据+盐进行哈希,其中盐通常是随机生成的字符串。它们至少有两个目的:
  • 防止攻击者通过访问哈希数据识别出冲突并使用彩虹表
  • 使试图进行暴力攻击的攻击者放慢速度。

啊,好的,我现在明白了,非常感谢。基本上,密钥用于加密和解密,而盐与哈希一起使用以使其更加安全。非常感谢 :) - cody
4
一个重要的区别是,如果攻击者知道盐值,盐值仍然能够实现大部分其用途。 - CodesInChaos
但是如果攻击者获得了盐的访问权限,那么对他来说这几乎就是一把钥匙,不是吗?他可以将其解密。 - Mojimi
1
@mojimi - 请记住,对于一个好的哈希算法,“无法解密”实际上意味着需要一些变体的暴力搜索来寻找碰撞。 - Oliver Charlesworth

4
关键字实际上就是你用来锁定原始内容的密码。
为了使密码更难以逆向工程,您可以向生成的加密中添加
举个明显简单的例子,假设您想要加密一个字符字符串。您的加密例程是将单词反转。 因此,对于字符串“Hello,World”,在运行加密后,您的字符串将变为“dlroW,olleH”。 然后,您可以向其添加盐。在此示例中,盐值是“foo”,因此盐化后的结果将为“dlroW,olleHfoo”。 现在,如果有人成功地逆向工程了您的加密算法,则会得到“oofHello World”,这不是原始消息,因此您的信息仍然安全!
当您进行迭代加密时,这确实非常有用,例如: result = salt + encrypt(salt+encrypt(salt+encrypt(message)))。

8
盐的真正目的并不是这个。 - Oliver Charlesworth

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