Pri*_*imm 0 java encryption aes encryption-symmetric
我使用AES和salt String来加密我的'密码',使用我制作的java程序.(它使用AES对称加密)
用户设置要加密的消息,盐,迭代和密钥的16个字节.
如果我将它设置为使用大量的加密和解密迭代,比如255,这真的会使我的密码比1次迭代更安全吗?
最简洁的答案是不.添加加密迭代无济于事.这与在基础算法中添加回合不同,其中更多回合实际上有帮助.
更长的答案是您使用错误的技术来存储密码.您不应该使用对称加密,您应该使用单向散列函数,例如bcrypt.
解决方案的弱点(对称加密)是您的软件必须可以使用加密密钥才能加密或解密密码.这意味着当攻击者闯入您的系统时,他们将能够同时获得您的密码数据库和密钥,因此对他们来说解密所有密码将是微不足道的.您应该假设攻击者能够获取您的源代码以及您的所有数据.
如果您使用哈希函数,那么您不必担心这种情况.即使攻击者获得了您的源代码和密码数据库,他们仍然无法反转单向哈希(假设您使用好哈希 - 再次考虑使用bcrypt),因此盗窃您的数据不会影响用户的密码.
当你考虑安全性时,几乎总是最好使用现有的解决方案(我提到过bcrypt吗?)而不是自己动手.安全很难做到,甚至专家也搞砸了.不要编写自己的密码存储系统.使用由专家设计的,更重要的是,由一大批其他专家进行分析和攻击.比如Bcrypt.
简短的回答是肯定的.
把它想象成一个魔方(它不是真正最好的例子,而是和我一起承受).明文是处于解决状态的立方体,密文是其扰乱状态.每轮加密都会旋转立方体的一个面.如果它更加剧烈地加扰,那么在尽可能短的移动中解决立方体的计算要困难得多.打破一轮AES将是密码相当于要求某人解决一个旋转一个面的魔方.
一种可以有效解决减少轮次加密的攻击就是SAT求解器攻击.
无论如何,您应该使用单向加密操作来存储密码.我认为首选的方法是bcrypting,因为它的加密安全(单向)和计算密集,因此非常难以暴力.