我有一个PHP登录系统,我检查用户输入的用户名,并用我数据库中的每个用户名进行交叉检查。如果匹配,则会查看密码,如果再次匹配,则会授予用户访问其个人资料的权限。如果不是,它们将被重定向到登录屏幕。我目前将密码存储为实际密码,未加密或任何其他密码。我想知道是否有可能获得用户在注册时输入的密码,使用我将编程的算法,例如用相应的数字替换每个字母(显然比这更复杂)。然后我将密码存储为输出,当从数据库中读取密码时,它将被解密。这是安全的,如果我制作自己的算法,或者有人可以轻松查看我的代码并解密它吗?
答案 0 :(得分:4)
不存储加密或(颤抖)纯文本密码。
如果需要存储密码值,请存储加密哈希函数的返回值。没有必要“推出自己的”加密哈希算法。 (通过保持算法“秘密”,加密算法的强度不。)
加密哈希算法是现代安全的主力。
https://en.wikipedia.org/wiki/Cryptographic_hash_function
当您需要测试密码时(通过将提交的密码与存储的密码值进行比较),只需通过相同的加密哈希函数运行提交的密码(待测试),然后从中返回并与之比较存储的哈希值。如果哈希值匹配,则明文密码匹配的概率极高。如果哈希值不匹配,则可以保证密码不匹配。
直接解决您提出的具体问题:
问:问:[我建议的实施]是否安全? 答:简短的回答是不,这不安全。我的答案的第一部分描述了处理密码令牌进行身份验证的更好方法。问:如果我制作自己的算法,或者有人可以轻松查看我的代码并解密它?
答:在保持代码“秘密”的过程中找不到加密算法的强度。