PHP中使用DES加密和解密

胜哥 PHP代码

以下代码实现了使用DES算法对一个字符串进行加密和解密的功能。

具体来说,encrypt() 函数接受两个参数:要加密的数据和密钥。它使用 OpenSSL 库中的 openssl_encrypt() 函数将数据加密,使用 CBC 模式和随机生成的 8 字节初始化向量 (IV)。然后,将 IV 和加密后的数据组合在一起,并对其进行 Base64 编码以便传输或存储。最后,函数返回加密后的数据字符串。

decrypt() 函数接受两个参数:加密后的数据和密钥。首先,它使用 Base64 解码将数据还原为二进制格式。然后,从数据中提取出前 8 个字节的 IV 和剩余的字节作为加密后的数据。使用相同的密钥和 IV,使用 openssl_decrypt() 函数对加密后的数据进行解密,返回解密后的原始数据字符串。

以下是 PHP 中使用DES加密和解密的示例代码:

<?php

function encrypt($data, $key) {
  $iv = openssl_random_pseudo_bytes(8);
  $cipher = openssl_encrypt($data, 'DES-CBC', $key, OPENSSL_RAW_DATA, $iv);
  $encrypted = $iv . $cipher;
  return base64_encode($encrypted);
}

function decrypt($data, $key) {
  $data = base64_decode($data);
  $iv = substr($data, 0, 8);
  $cipher = substr($data, 8);
  $decrypted = openssl_decrypt($cipher, 'DES-CBC', $key, OPENSSL_RAW_DATA, $iv);
  return $decrypted;
}

$data = "This is a secret message.";
$key = "12345678";

$encrypted = encrypt($data, $key);
echo "Encrypted: " . $encrypted . "\n";

$decrypted = decrypt($encrypted, $key);
echo "Decrypted: " . $decrypted . "\n";

?>

请注意,此代码使用了随机生成的初始化向量 (IV) 来增加安全性,并将加密后的数据和 IV 结合在一起,以便在解密时使用。

最后,在示例代码中,我们定义了一个字符串变量和一个密钥变量,将字符串加密并输出加密后的结果,然后将加密后的结果解密并输出解密后的原始字符串。