Java 如何更改我的应用程序';什么是密码哈希?
我有一个后端,它的密码存储在Hashing-A(单向)中,我希望它转换为Hashing-B(单向)。我想删除Hashing-A已删除并更改为Hashing-B的密码 在后端,我可以在下次登录时简单地将密码更改为Hashing-B,但真正的问题在于应用程序,我的应用程序通过Hashing-A发送密码,我可以更改密码,但旧应用程序将继续面临相同的问题,我不能简单地推出旧应用程序 在旧的应用程序中几乎不可能有任何更改Java 如何更改我的应用程序';什么是密码哈希?,java,database,encryption,cryptography,password-protection,Java,Database,Encryption,Cryptography,Password Protection,我有一个后端,它的密码存储在Hashing-A(单向)中,我希望它转换为Hashing-B(单向)。我想删除Hashing-A已删除并更改为Hashing-B的密码 在后端,我可以在下次登录时简单地将密码更改为Hashing-B,但真正的问题在于应用程序,我的应用程序通过Hashing-A发送密码,我可以更改密码,但旧应用程序将继续面临相同的问题,我不能简单地推出旧应用程序 在旧的应用程序中几乎不可能有任何更改 在我的后端不保留Hashing-A的情况下,最好的方法是什么 通常使用带有加强的密码
在我的后端不保留Hashing-A的情况下,最好的方法是什么 通常使用带有加强的密码哈希来避免对数据库的暴力强制或字典攻击。如果攻击者窃取服务器或数据库,则很难检索密码,因为salt和迭代计数将为密码本身增加额外的防御级别 因此,在已经存储的哈希值中添加迭代(工作因子)和可能的附加salt字节是有意义的。唯一的要求是原始散列没有完全破坏(即,是一个加密安全的散列),并有足够大的输出 您可以做的是向新更改的哈希值添加某种标识符—协议标识符和可能的参数。这样,您甚至可以在线更改哈希值,选择直接比较(在您的情况下)或在服务器上添加工作来执行B哈希
您无法破解此漏洞,因为攻击者无法再使用哈希-A值,并且无法反转哈希-B以访问哈希-A。当然,在传输过程中保持密码或哈希-A的安全至关重要。但是您可以简单地部署TLS 1.2来避免这种情况。不幸的是,我认为不改变旧的应用程序是不可能的。交换散列算法有一个最佳实践,但我知道的那个只有在您也可以更改客户端时才有效。