openssl_public_encrypt
データを暗号化し、MySQL データベースに保存するために使用したいと考えています。次に、データが必要になったときにSELECT
、MySQL データベースからデータを取得し、それを使用openssl_private_decrypt
して復号化します。暗号化された後base64
、MySQL のデータをエンコードし、データを復号化する前に再度デコードします。
INSERT
データとデータベース内のデータを暗号化するために使用しているコードは次のとおりです。
<?php
require_once('default.inc.php');
mysql_connect_selectdb($host,$username,$password,$database);
function encrypt($string) {
$publickey = '-----BEGIN PUBLIC KEY-----
PUBLIC KEY HERE
-----END PUBLIC KEY-----';
openssl_public_encrypt($string,$encryptedstring,$publickey);
return $encryptedstring;
}
$number = base64_encode(encrypt('1234567890123456'));
$qry = "UPDATE table SET number='$number' WHERE id='120006'";
$result = mysql_query($qry);
if (!$result) {
die(mysql_error());
}
?>
このdefault.inc.php
ファイルはエラー報告を E_ALL に設定し、mysql 接続変数とmysql_connect_selectdb()
関数も定義します。データベースに正常に挿入され、画面への出力はありません。
SELECT
データベースから使用して復号化するコードは次のとおりです。
<?php
require_once('default.inc.php');
mysql_connect_selectdb($host,$username,$password,$database);
$key = '-----BEGIN RSA PRIVATE KEY-----
PRIVATE KEY HERE
-----END RSA PRIVATE KEY-----';
function decrypt($string,$privatekey) {
openssl_private_decrypt($string,$decryptedstring,$privatekey);
return $decryptedstring;
}
$qry = "SELECT * FROM table WHERE id='120006'";
$result = mysql_query($qry);
if ($result) {
if (mysql_numrows($result) == '1') {
$data = mysql_fetch_assoc($result);
$number = decrypt(base64_decode($data['number']),$key);
echo 'Number: '.$number;
}
else {
echo 'no rows';
}
}
else {
die(mysql_error());
}
?>
以外の画面への出力はありませんNumber:
。復号化されない理由がわかりません。データベースから直接エコーすることができ$data['number']
、base 64 でエンコードされたデータとして正常に表示されます。また、base 64 でデコードされた後にデータをエコーすることができ、画面上でバイナリとして正常に表示されますが、復号化しようとすると出力はありません。
MySQL フィールド番号は(VARCHAR(128)
試行済みVARBINARY
、BINARY
およびBLOB
)です。VARCHAR
base64
latin1_swedish_ci
どんな助けでも大歓迎です!ありがとう!