代码之家  ›  专栏  ›  技术社区  ›  Kugelfisch

用php为数据库加密数据

  •  -1
  • Kugelfisch  · 技术社区  · 11 月前

    我有一个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);
    

    我还有一个问题,因为我对加密和加密方法不是很熟悉。这是加密数据库数据的好方法吗?还是有更好/更安全的方法?

    0 回复  |  直到 11 月前