5

ユーザーが自分のユーザー名とパスワードを送信するログインフォームを作成しました。ユーザー名が存在する場合、パスワードをデコードし、送信されたパスワードと同じかどうかを確認します。

// これは db からのものです

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno"

// そして、これは上記の文字列をデコードした後です

string(32) "�� U�U{q�0�4��è€UC��o�/�*�."

しかし、それは123456を返すはずです

私が使用するエンコードのために

$this->encrypt->encode('123456');

そしてこれが秘密鍵

$config['encryption_key'] = 'kRlaMneym7rF';

// 編集

問題は、パスワード フィールドが varchar 50 に設定されていたことです。

4

5 に答える 5

5

config で codeigniter 文字セットを確認してください

$config['charset'] = 'UTF-8';

データベースの文字セットとは異なります。あなたの葛藤はおそらくそこから来ています。

Codeigniter をテストして、正しい結果が返されるかどうかを確認します。以前のようにハードコーディングするか、コントローラーでこれをコピーしてテストしてください。

function testencrypting(){
  $str = '12345';
  $key = 'my-secret-key';
  $encrypted = $this->encrypt->encode($str, $key);
  echo $this->encrypt->decode($encrypted, $key);
  exit;

}

私は期待される結果を生成します:12345。それが機能する場合、問題はおそらくCHARACTER SET(CHARSET)です。ここでは暗号化キーを使用しています。エンコードとデコードの 2 番目のパラメーターを省略して、config でデフォルトを使用できます。

それが役に立ったかどうか教えてください

于 2013-02-25T08:32:00.633 に答える
2

やってみました:

$this->encrypt->decode($string);
于 2013-02-22T15:51:48.227 に答える
0

私はこれを理解しました。パスワードのユニコードを保存するために使用していたテーブルがlatin1だったことが原因であることがわかりました。users テーブル フィールドのパスワードを utf-8 に変更したところ、この問題は解決したようです

于 2013-07-28T07:46:30.353 に答える