要实现PHP的对称加密算法,我们可以使用PHP内建的openssl扩展。具体来说,使用openssl_encrypt和openssl_decrypt函数可以实现DES和AES算法。
使用openssl_encrypt函数加密
function encrypt($data, $key, $cipher = "aes-128-cbc") {
// 使用随机生成的IV
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
// 加密
$encrypted = openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA, $iv);
// 将IV和加密后的数据拼接在一起
return base64_encode($iv . $encrypted);
}
以上代码展示了如何使用openssl_encrypt函数加密一个字符串,使用的默认算法是AES-128-CBC。在加密过程中,先使用openssl_cipher_iv_length函数生成一个随机的IV,然后将其和加密后的数据拼接在一起,并进行Base64编码,最终返回加密后的字符串。
使用openssl_decrypt函数解密
function decrypt($encrypted, $key, $cipher = "aes-128-cbc") {
// Base64解码
$encrypted = base64_decode($encrypted);
// 提取IV和加密后的数据
$iv = substr($encrypted, 0, openssl_cipher_iv_length($cipher));
$encrypted = substr($encrypted, openssl_cipher_iv_length($cipher));
// 解密
return openssl_decrypt($encrypted, $cipher, $key, OPENSSL_RAW_DATA, $iv);
}
以上代码展示了如何使用openssl_decrypt函数解密由上一个例子中加密的字符串。
示例说明
下面展示一个使用AES-256-CBC算法加密和解密字符串的示例:
$key = "mysecretkey";
$data = "Hello, world!";
// 加密并输出密文
$encrypted = encrypt($data, $key, "aes-256-cbc");
echo "Encrypted: " . $encrypted . "\n";
// 解密并输出明文
$decrypted = decrypt($encrypted, $key, "aes-256-cbc");
echo "Decrypted: " . $decrypted . "\n";
输出:
Encrypted: EirJeAWeR5cl1FJoKrlmNYiPRXBB2G0vL/Jj7L9RnKw=
Decrypted: Hello, world!
另一个示例
下面展示一个使用DES算法加密和解密字符串的示例:
$key = "mysecretkey";
$data = "Hello, world!";
// 加密并输出密文
$encrypted = encrypt($data, $key, "des-cbc");
echo "Encrypted: " . $encrypted . "\n";
// 解密并输出明文
$decrypted = decrypt($encrypted, $key, "des-cbc");
echo "Decrypted: " . $decrypted . "\n";
输出:
Encrypted: Rrb/xSvMEarvMK9D/GJTEGF28cWwpdyi
Decrypted: Hello, world!
以上两个示例展示了如何使用不同的算法加密和解密字符串。需要注意的是,在生产环境中,应该选择更强的加密算法,例如AES-256-CBC。同时还要注意保护好加密密钥,不要泄露给攻击者。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP对称加密算法(DES/AES)类的实现代码 - Python技术站