我使用了一个简单的方法来修改密码,这样它就不会以纯文本的形式存储。这是一个生产数据库和应用程序,它一直工作,直到从WindowsServer2003切换到2012。

private function simpleCrypt($password) {

    $text = strtoupper(trim($password));
    $chars = str_split($text);
    $password2 = '';

    foreach ($chars as $char) {
        $asciivalue = ord($char);


        if ($asciivalue < 128) {
            $newasciivalue = $asciivalue + 128;
            $newchar = chr($newasciivalue);
            $password2 = $password2 . $newchar;

        } elseif ($asciivalue > 128) {

            $newasciivalue = $asciivalue - 128;
            $newchar = chr($newasciivalue);
            $password2 = $password2 . $newchar;

        }
    }


    return $password2;
}

当我的密码在这个脚本中运行时,它会显示一个结果,与另一个系统在2003年生成的实际编码密码相比。它显示了正确的“西方”字符。如果我使用Firefox并将文本编码改为western,它会显示密码的正确数据库表示形式。我试着在登录页面的标题中添加meta,以为它可以纠正这个问题,但我得到了相同的结果。
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

最佳答案

尝试

$text = mb_convert_encoding(strtoupper(trim($password)),'iso-8859-1');

10-08 08:26