$pass=md5("test");
$query="insert into test (pass) values ('$pass')";// 以下为比较密码
//$password为客户输入的密码
$passwd=md5($password);
$query="select * from test where user='$user' and pass='$passwd'";

解决方案 »

  1.   

    像你说的那样好像不行吧,
    如果一定要的话,先将存在user表里的密码改为加密形式就行了吧.
      

  2.   

    要知道,你的所谓的没有加密过的密码,在home的mysql数据库下的user表中也是加密过以后存储的(如果你想通过数据库验证这种方法来实现的话)
    所以,你这样做没有太大的意义。因为你不用担心密码在传递的时候被截获因为,一般的,直接输入密码(是用掩码显示的)都会经过非可逆算法(大家都这么说,我也不知道到底可逆否)passw来加密。所以,意义不大
      

  3.   

    一,如果你是要在登录数据库时将密码加密,而不是要把用户的密码(例如论坛注册用户的密码)加密,那就不存在密码的网络传输的问题,因为 mysql 和 php 都是在服务器端,而且一般都在同一个主机上(使用 remote 数据库的好像不多)。所以这种加密是没有意义的。二,mysql 数据库的密码本身就是加密的,不过用的不是 md5,而是 password() 函数。三,如果你想用 md5,理论上可以,但实际上不行,因为 md5 字符串的长度是 32,而 mysql.user 数据表的 user 字段是 char(16),长度不够!
      

  4.   

    我能想出的用户密码加密有两种情形:1. 数据库中用户密码的加密假设用户的密码是
    $password = "1234";
    而数据库中保存的是
    md5($password) = "81dc9bdb52d04dc20036dbd8313ed055";
    不是 "1234"(明文),"1234" 与 "81dc9bdb52d04dc20036dbd8313ed055" 是唯一对应,但是由 "1234" 可以求出 "81dc9bdb52d04dc20036dbd8313ed055",
    用户登录时可以用类似$md5_password = md5($password);
    $sql = "select * from users where ... and password='$md5_password'";
    ...的办法做验证。但是由于md5 算法的“不可逆性”,由 "81dc9bdb52d04dc20036dbd8313ed055" 无法反算出 "1234",最大限度地保证了用户帐号的安全
    2. 固定密码的加密假设你有一些页面,只想让少数人特定的人访问(如网站管理人员),一个简单的办法就是为这些页面设置固定的密码,例如 "1234"
    但是,直接在 PHP 文件中以密码明文进行验证:if ( $password == "1234" )显然太危险,如果改成:if ( md5($password) == "81dc9bdb52d04dc20036dbd8313ed055" )别人即使看到了你这个页面,它还是得不到你的密码
    当然,以上措施都只是“防君子,不防小人”的,只能保证“即使数据泄密,密码也不会泄漏”,就像《风语者》中安德斯的任务:“to protect the code(保护密码,而不是保护密码员)”。