【问题标题】:Difference between SALT and KEY. EncryptionSALT 和 KEY 的区别。加密
【发布时间】:2023-03-15 04:35:02
【问题描述】:

好的,所以我尝试学习一些关于在我的 java 应用程序中加密消息的知识。我刚刚发现 SALT 和 KEY 不一样。

谁能帮我理解这两者的区别是什么?

【问题讨论】:

  • 在加密您打算稍后解密的消息时,您通常不会使用盐。当您对用户密码之类的东西进行哈希处理时,它更有用。盐基本上只是您添加到密钥中的随机“噪音”,以使生成的哈希更安全。

标签: java encryption key salt


【解决方案1】:

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

salt 最常见于加密 hash 函数,而不是加密函数。这个想法是,不是只对您的数据(例如密码)进行散列,而是对数据+盐进行散列,其中盐通常是随机生成的字符串。它们有(至少)两个目的:

  • 阻止有权访问散列数据的攻击者使用rainbow table 识别collision
  • 减缓尝试暴力攻击的攻击者的速度。

【讨论】:

  • 啊,好的,我现在明白了,非常感谢。基本上,密钥用于加密和解密,而盐与散列一起使用以使其更加安全。非常感谢:)
  • 一个重要的区别是,如果攻击者知道盐,盐仍然可以实现其大部分目的。
  • 但是如果攻击者获得了盐的访问权,这对他来说几乎就是一把钥匙,不是吗?他可以取消哈希。
  • @mojimi - 请记住,对于一个好的哈希算法,“unhash”实际上意味着一些暴力搜索冲突的变体。
【解决方案2】:

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

要使密码更难逆向工程,您可以在生成的加密中添加 salt


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

当您迭代加密时,这真的会派上用场,例如,
结果=盐+加密(盐+加密(盐+加密(消息)))。

【讨论】:

  • 这并不是盐的真正用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2014-08-01
  • 2011-04-20
相关资源
最近更新 更多