我有一个应用程序,需要保留多个用户密码,并要求它们可以恢复。
我正在考虑使用主密码加密密码+另一种加密机制。
加密密钥将保存在外部系统中,并可使用API进行检索。事情是我不确定是否:
感谢。
EDIT -------------- 我知道它已经关闭......但我确实想要澄清 - 我必须有能力解密,这是我的应用程序中的一个主要部分......据说我认为我得到了AES算法的答案。我不需要哈希,因为哈希是不可逆转的
答案 0 :(得分:5)
堆栈溢出是一个帮助您解决编码问题的论坛。
这个问题更适合The security forum。
也就是说,有一些标准化的加密指南。
实施对称加密密码时,最好使用AES Algorithm。这是迄今为止最安全的对称密钥块密码,是我们目前认为是“受保护”的标准。
如果您要查找hash密码,这是密码存储的标准,那么就不需要密钥。使用SHA1算法。就输出的大小而言,它是当前使用的更安全的散列算法。其他选项包括SHA256和SHA512
修改:哦,他们正在改变的时代。哈希算法也是如此!人们正在从哈希算法的SHA系列转向Bcrypt,后者还有其他一些功能,例如引入成本因子以防止彩虹表。
答案 1 :(得分:1)
以下是您的强制性阅读:You're Probably Storing Passwords Incorrectly
现在,关于如何存储加密密码的问题。别。存储哈希密码。
你可能要求解决错误的问题。我怀疑你想创建一个恢复密码的功能......在这种情况下,如果你不介意,我会发给你to one of my previous answers。
作为替代方案,您可能希望在客户端计算机上为单个用户存储多个密钥。如果这是您想要的,那么您最好的选择是使用操作系统为您提供的安全性来保护它。您不应期望通过操作系统为用户提供比加密文件更好的效果。
否则,您基本上设计了所有存储密码将被盗的方式。或者因为现在被认为是安全的可能明天不再被认为是安全的,或者因为我们是人类(对吧?)而我们可能会犯错误。
无论如何,您的安全性最好与辅助API的身份验证过程一样强(我的意思是,检索解密密码的密钥)。你确实提到了Java,你的java代码被反向设计的几率是什么,以发现如何获取密码?
答案 2 :(得分:1)
我不确定[...]这种方法是否足够安全
不,不是。任何允许恢复密码的密码存储方法而不是重置密码的安全方法都被大多数人认为是“安全的”。此外,用户如何发送他们的“恢复”密码?因为使用电子邮件执行此操作只是最糟糕的方法。
如果您无法绕过必须能够“恢复”密码,那么您想要的是非对称 [aka公钥]加密。密码将由公钥加密并存储在数据库中以进行比较。私钥应保持独立,理想情况下在保险箱中的记忆棒上离线,并且至少有一个密码保护,如果不是由不同的人持有两个或更多密码。
正如其他人提到的那样,这个问题比http://security.stackexchange.com更适合此问题,但已经被问过很多次,你会得到更多关于的强烈鼓励不是这样做而不是解决方案。
答案 3 :(得分:0)
PHP支持SHA1,手册:http://php.net/manual/en/function.sha1.php
if(sha1($ str)==='d0be2dc421be4fcd0172e5afceea3970e2f3d940'){ 回声“你想要一个绿色或红色的苹果吗?”; }
和JAVA SHA1示例:http://www.herongyang.com/Cryptography/SHA1-Message-Digest-in-Java.html
您可以将SALT + PSK(SHA1)与AES加密相结合。
我建议使用SYSTEM SALT(在用户+ PSK SHA512上用系统+ SALT生成SHA512键进行登录)。
如果你不能使用,也不能使用带有SHA2的bcrypt或scrypt,那么最好使用PBKDF2。