PHP可逆加密/解密函数分享


在PHP中,实现可逆加密/解密的一种常见方式是使用`openssl_encrypt`和`openssl_decrypt`函数,它们允许你使用各种加密算法(如AES)对数据进行加密和解密。以下是一个使用AES-256-CBC加密算法的示例,该算法因其高安全性而广泛使用。

### 加密函数


function encrypt($data, $key, $ivLength = openssl_cipher_iv_length('aes-256-cbc')) {
    $iv = openssl_random_pseudo_bytes($ivLength);
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    // 返回加密后的数据和IV,以便解密时使用
    return base64_encode($iv . $encrypted);
}

### 解密函数


function decrypt($data, $key) {
    $data = base64_decode($data);
    $ivLength = openssl_cipher_iv_length('aes-256-cbc');
    $iv = substr($data, 0, $ivLength);
    $encryptedData = substr($data, $ivLength);
    $decrypted = openssl_decrypt($encryptedData, 'aes-256-cbc', $key, 0, $iv);
    return $decrypted;
}

### 使用示例


$key = '你的密钥,需要足够复杂,例如32个随机字符';
$data = '需要加密的数据';

// 加密
$encryptedData = encrypt($data, $key);
echo "Encrypted: " . $encryptedData . "\n";

// 解密
$decryptedData = decrypt($encryptedData, $key);
echo "Decrypted: " . $decryptedData . "\n";

请注意,这里的`$key`需要是足够复杂的字符串,以确保加密的安全性。通常,对于AES-256,密钥长度应为32字节(256位)。

另外,加密数据中包含了初始化向量(IV),它是随机生成的,并与加密后的数据一起返回。在解密时,需要从加密数据中提取IV,然后用于解密过程。这种方法增加了加密的安全性,因为即使相同的明文被多次加密,由于IV的不同,加密后的密文也会不同。