我使用了一个简单的方法来修改密码,这样它就不会以纯文本的形式存储。这是一个生产数据库和应用程序,它一直工作,直到从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');