我正在做以下事情:
SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=
$somepass = base64_encode($_POST['password']);
if($myrow[1] != $somepass) echo 'error';
else echo 'welcome';
我总是得到错误,我甚至回应$ somepass和$ myrow [1]它们是相同的,但仍然是错误的。我究竟做错了什么?感谢
答案 0 :(得分:2)
尝试使用var_dump
而不是echo - 可能其中一个在开头/结尾有一个空格或换行符。
编辑:
您必须将其存储为CHAR(40):A fixed-length string that is always right-padded with spaces to the specified length when stored
使用VARCHAR或trim()
答案 1 :(得分:0)
如果$ myrow [1]实际上是base64编码中的正确密码,我看不到任何错误。
最后试试这个:
echo "<br />$myrow[1] != $somepass";
它说什么?
顺便说一下:我认为没有任何理由对密码进行base64编码。你想要完成什么?
答案 2 :(得分:0)
我觉得如果我做一个var_dump()我会得到:
string(40)“YWRraM2 =” string(8)“YWRraM2 =”
如果我使用控制台将数据插入数据库,它会在某种程度上为传递字段添加额外的空间。myplacedk:我有什么理由不这样做吗?我认为它会增加额外的安全性吗?
答案 3 :(得分:0)
这种编码做了两件事:
所以不,它并没有真正添加任何安全性。它只是一种编码,很容易解码。
也许你误以为md5-hashing或类似的东西。
玩得很好,但是在安全方面,我真的建议不要使用你不理解的东西。从长远来看,它会造成更大的伤害。
答案 4 :(得分:0)
一些问题: