2017-06-30 3 views
0

私は、AES_ENCRYPTを使用して暗号化されたデータの列を持つMYSQLデータベースを持っています。また、ユーザーがこのデータの一部を入力し、Mcrypt(使用されているコードについては以下を参照)を使用して暗号化され、MYSQLデータベースに対して検証されたフォームがあり、一致する場合はtrueを返します。一部のエントリーではMcrypt、PHP/MYSQLおよびWebフォームが動作しません

ほとんどの場合、これは問題なく動作します。しかし、少数の投稿については、データベースへの接続に失敗します。この同じデータでは常に失敗しますが、別のデータを試すと成功します。したがって、データに固有の何かがあり、それが失敗する原因となり、パターンを見つけることができません。データは、それが上記のコードでは数16で行うようにすることができれば、私は思ったんだけど、同じ文字の長さ、文字と数字だけの異なる組み合わせ、すなわちhr152698またはtq452698

$mode=MCRYPT_MODE_ECB; 
      $enc=MCRYPT_RIJNDAEL_128; 
      $numblock=floor(strlen($id)/16); 
      $pad_len= 16-(strlen($id) % 16); 
      $id=str_pad($id, (16*(floor(strlen($id)/16)+1)), 
chr($pad_len)); 
      $encrypted_id=mcrypt_encrypt($enc, $ky, $id, $mode, 
mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM)); 

です。おそらく、特定のテキストが入力されていれば、それは高くなる必要がありますか?このデータを保持するMYSQL列は、varbinary(25)として設定されます。

よろしく マーク

+0

エラーはなんですか? – deceze

+0

こんにちはマーク、私は暗号化に関する多くの経験がありませんので、私はあなたに推測を与えることができます:あなたは、複数の場所(PHPファイル、データベース、任意のビューファイルフォームと一緒に)。また、うまく機能していないテキストに特殊文字が含まれていないかどうかを調べることによってもチェックする価値があります。 – Gegenwind

+0

上記のコードを実行すると、次のセグメントが実行されます。 $ query = "SELECT * FROM employees where logon = '$ encrypted_id'"; mysqli_query($ db、$ query)またはdie( 'Error querying database。'); ' フォームを送信するときに私のウェブページに表示されるエラーは、' Error querying database 'です。私が提出するテキストは、Mycryptを介して入力され、英数字のみで構成されています。時間の95%、時間のわずか5%です。エラーが発生し、同じテキストが入力されても繰り返しが可能です。したがって、ランダムな接続エラーではありません。 – Mark

答えて

0

上記の提案のおかげで、それは右の線に沿って考えて私を得ました。私はMycryptの結果をエスケープしていないので、上記のMYSQLエラーの原因となる無効な文字を生成していました。

私は:$encrypted_id=mysql_real_escape_string($encrypted_id);を使用して解決しました。

+0

これを実際に使用する必要があります... $ encrypted_id = $ db-> real_escape_string($ encrypted_id) ; 'MYSQLiと連携する – Mark

関連する問題