Perl地穴似乎不起作用

时间:2012-04-13 06:13:13

标签: perl crypt

我正在尝试使用crypt函数来验证用户在数据库中的详细信息:

    my $sql = $dbh->prepare("SELECT COUNT(id) FROM tblUsers WHERE UPPER(Username)=UPPER(?) AND Password=?");
    my $count;
    $sql->execute(
        $args{login_username},
        crypt($args{login_password},$args{login_username})
        );

但它返回0行(密码肯定正确)

行:

    $sql->execute($args{login_username},$args{login_password});

完美无缺。

关于可能出错的任何想法?

1 个答案:

答案 0 :(得分:2)

看起来密码存储在未加密的数据库中。要比较加密形式的值,您还需要在数据库端对它们进行加密。

MySQL具有ENCRYPT功能,因此您可以编写

my $sql= $dbh->prepare(<<SQL);
SELECT COUNT(id)
FROM tblUsers
WHERE UPPER(Username) = UPPER(?)
AND ENCRYPT(Password, Username) = ?
SQL

$sql->execute($args{login_username}, crypt($args{login_password},$args{login_username}));

但确切的语法取决于您使用的平台。