我有一个PHP后端项目。我想对保存到数据库中的数据进行加密。目前,我有一个函数,它具有用于加密/解密的全局密钥。我还想用用户特定的密钥来加密数据。我该怎么做?我应该再次加密加密的数据,还是将两个密钥结合起来?最好的方法是什么?
这是我当前的代码:
function encryptJson($json, $key) {
$iv = random_bytes(16);
$encrypted = openssl_encrypt($json, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
$result = base64_encode($iv . $encrypted . $tag);
return $result;
}
function decryptJson($data, $key) {
$data = base64_decode($data);
$ivSize = 16;
$tagSize = 16;
$iv = substr($data, 0, $ivSize);
$encryptedWithTag = substr($data, $ivSize);
$encrypted = substr($encryptedWithTag, 0, -$tagSize);
$tag = substr($encryptedWithTag, -$tagSize);
$json = openssl_decrypt($encrypted, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
if ($json === false) {
// decryption failed
return null;
}
return $json;
}
// usage
$key = hex2bin('example_key');
$data = 'example_data';
// encrypt
$encryptedData = encryptJson($data, $key);
echo "encrypted data: " . $encryptedData . "\n";
// decrypt
$decryptedData = decryptJson($encryptedData, $key);
echo "decrypted data: ";
var_dump($decryptedData);
我还有一个问题,因为我对加密和加密方法不是很熟悉。这是加密数据库数据的好方法吗?还是有更好/更安全的方法?