1

ログインモデルに、ユーザーのパスワードを復号化/暗号化するための関数を実装しました(暗号化されたバージョンではCookieに保存されます)。ブラウザを再起動し、Cookieを使用してパスワードでログインしようとした場合を除いて、すべて正常に機能します。

パーサーは、パスワードをエコーアウトすると正しいパスワードであることがわかりますが、パスワードが間違っていると教えてくれます。そのため、「strlen」を試して、パスワードの文字数を確認しました。32(!)と表示されています。私が考えることができる唯一のことは、(この場合)28個の空白が追加されていることです。これはエコーでは見ることができません。

誰かが何が起こっているのか、そしてそれを修正する方法を教えてくれたら本当にありがたいです。

function decrypt($encrypedText) {
    $key = "The secret key is";
    $decryptedText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypedText), MCRYPT_MODE_ECB);

    echo $decryptedText;            //  "abcd" <- what I put in
    echo strlen($decryptedText);    //  32 (?)

    return $decryptedText;
}
4

2 に答える 2

3

これは、32バイトがRijndael 256のブロックサイズ(つまり、32 = 256/8)であり、復号化されたデータが'\0'その長さに一致するように埋め込まれているためです。

これを修正するには、次のようにこれらの文字を削除します。

return rtrim($decryptedText, '\0');
于 2012-09-25T14:00:10.977 に答える
1

空白を削除するには、phptrim()関数を使用します

$password=trim($_COOKIE("value"));

最初と最後から空白を削除します

于 2012-09-25T13:47:07.127 に答える