使用其他算法加密已加密的数据是否安全?
例如,我使用“PBKDF2WithHmacSHA1”加密了密码。
现在我想用“SHA512”进一步加密它(因为它被认为比“SHA1”更好)
这会以任何方式削弱我的加密效果吗?
另外,我应该反转加密密码以提高安全性吗?
即使“PBKDF2WithHmacSHA1”足够,我宁愿有额外的保护层。这就是我一直在考虑多重加密的原因。但是,我目前不打算使用BouncyCastle等第三方选项。
如果您具体是Java,那将会很有帮助。
谢谢!
答案 0 :(得分:2)
所以有一些事情......
1:"使用其他算法加密已加密的数据是否安全"
答案:是的。它需要两个算法来解密,可能两者都不是攻击者知道的(或以什么顺序等),因此它是安全的。它不会损坏您的数据。
2:"我使用" PBKDF2WithHmacSHA1"加密了密码。"
评论错了。你什么都没有加密。你做的是HASHED你的密码。关键的区别在于HASH是任意长度的一段数据的固定长度表示。这意味着"你好"的哈希"这是一个更长的短语"将是完全相同的长度(但不同的内容)" (假设您使用相同的算法,您就是这样)。假设哈希算法设计正确,应该无法进行逆向工程并恢复原始数据。另一方面,加密接收任意长度的数据,并随机吐出"随机"类似长度的数据。 通过加密,可以恢复原始数据。
所以,要清楚,你是哈希,而不是加密。这将是一个重要的区别。
3:现在我想使用" SHA512"进一步加密它。 (因为它被认为优于" SHA1")这会以任何方式削弱我的加密吗?
答案:如前所述,您需要进行哈希处理,而不是加密密码。这意味着只要您的PBKDF2WithHmacSHA1算法完成,您将拥有一个包含2 ^ 160种可能组合的字符串(来源:PBKDF2WithHmacSHA512 Vs. PBKDF2WithHmacSHA1)。这意味着您已经创建了一组可能的值(虽然可以说很大),然后您可以将这些值输入到PBKDF2WithHmacSHA512或简单的SHA512(无论哪个)中。
这是重要的部分。请记住,散列提供了一个字符串,它是数据的代表。由于您已经生成了一个结果空间为2 ^ 160个可能条目的哈希,通过更强大的哈希算法运行该哈希将不会显着提高您的安全性。
4:"我目前不打算使用BouncyCastle等第三方选项。"
评论:我不完全确定你的意思,但我会提出警告。加密的最大规则之一是:不要自己做。不要编写自己的算法。甚至不要编写自己的标准算法实现(例如学术练习或其他内容)。相反,使用一个已知的设计和功能正常的库(JAVA或第三方包含的库)。
5:其他所有:额外的保护层是一件好事。反转密码是你可以做的一件事;另一种流行的(并且广泛使用的)方法是引入SALT。这只是您在函数中使用的单词或短语(通常是存储的明文)。例如,如果你正在哈希"你好",你可以使用像#34; helloSALT"," ShelloALT"," helSAloLT"等等。它只是引入预先散列数据的额外数据,使其更加复杂。理想情况下,只有你的程序才能知道如何使用盐,因此破解密码会更加困难。 编辑:正如英仙座指出的那样,每个密码的SALT都不同。您还可以引入一个PEPPER(是的,盐和胡椒),除了PEPPER在整个程序中保持不变外,基本相同。
无论其!
现在计算机的速度有多快,最大的问题是计算时间。具体来说,它是多么的小。 SHA1,甚至SHA512哈希都可以非常快速地生成,这使得计算机每秒可以生成数百万个哈希,这使得他们在BRUTE FORCING您的密码方面取得了一些成功(这是一件坏事)。所以,你理想的是一个算法,需要一个长的"生成的时间(通过"长"我的意思是1到10毫秒......按人类标准来说仍然非常快,但计算机标准非常慢)。例如,如果您的哈希生成需要10毫秒,那么您每秒只能计算100个哈哈......而不是数百万。
输入BCrypt。与SHA512一样,这是一种散列算法。 (它也是文件加密实用程序的名称,尽量不要混淆两者)。 BCrypt是一种自适应算法。它的设计使得当计算机变得更强大时,您可以使哈希变得更加复杂。我只是将您重定向到此在线bcrypt生成器,而不是详细说明:https://www.dailycred.com/blog/12/bcrypt-calculator
作为参考,选择4次迭代后,哈希几乎立即生成,但是如果选择了12次迭代,则哈希需要大约2整秒才能生成 - 生成单个密码需要很长时间。该演示只能达到12,但是bcrypt支持31.(这个数字是根据网站而定的,这个数字可能是任意的,并且意味着其他的东西。重点是,使用bcrypt你可以配置它需要更长的时间来生成一个hash - 攻击者不仅需要更多时间来生成哈希值,而且他们需要知道多少重复目标...这是另一层安全性。