1

社会保障番号を暗号化しようとすると、クエリが時折機能しますが、5 ~ 10 回ごとに 1 回スローされます。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�9~���d�~/C�yK�~�� _', ' 50', '62' )' at line 1
SSN: _mosPEdaXEsB7zJCQe5aymaCmkcSl9bnPL5ClLXcz2QA=_ 
IV: _ �6�k���_O�'�9~���d�~/C�yK�~�� _

そして、ここにコードがあります

    //Encryption/Decryption key
     $Key = hash("SHA256", $Lname, true);
    //Encryption Algorithm
    $cipher_alg = MCRYPT_RIJNDAEL_256;

    $iv =  mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);

    $ESSN = mcrypt_encrypt($cipher_alg, $Key, $SSN, MCRYPT_MODE_CBC, $iv);
    $ESSN = '_' . base64_encode($ESSN) . '_';
     $iv = '_' . $iv . '_';

if(!mysqli_query($connection, "CALL Update_ClientSSN('$ESSN','$iv', ' $AppID',  '" . $_SESSION['ID'] . "' );")){
        $Save .= " Error saving Client SSN";
    echo $connection->error;
    echo $ESSN . ' IV: ' . $iv;
    }

また、もともと私はIVと暗号文を連結して爆発させていましたが、それでもエラーが発生したため、アンダースコアは実験中です。私は困惑しています

4

2 に答える 2

2

$ESSN で行ったのと同じように $iv 変数を base64_encode するか、少なくとも 16 進形式に変換してから DB に格納し、それが役立つかどうかを確認する必要があります。これは、$iv に ' (シングル クォーテーション) などの不正な文字が含まれている可能性があるためです。

于 2013-04-14T00:03:30.127 に答える
0

あなたの問題は、生成された値$ivに一重引用符が含まれていることです (中間のどこか: O�'�9)。これにより、無効な挿入ステートメントが発生します。準備済みステートメント (PDO または準備済みステートメント) またはエンコーディングを使用$ivすると、問題が解決するはずです

于 2013-04-14T00:03:43.733 に答える