PHP 在进入7.x 时代后,默认就不再附带 mcrypt 扩展,mcrypt 将被 openssl_* 一族函数所替代。所以,对于 PHPer 来说,有必要学习一下 PHP 的 OpenSSL 扩展。
本文就先从 OpenSSL 扩展中的对称加密说起。后面会陆续更多非对称加密、数字签名、数字证书等函数的讲解。
PHP 的 OpenSSL 扩展中,对称加密的相关函数有:
- openssl_encrypt()
- openssl_decrypt()
- openssl_random_pseudo_bytes()
- openssl_get_cipher_methods()
- openssl_cipher_iv_length()
光看PHP的官方文档还有点难理解。上一段代码,更清楚地看下这些函数怎么完成加密的:
// 加密算法
$encryptMethod = 'aes-256-cbc';
// 明文数据
$data = 'Hello World';
// 生成IV
$ivLength = openssl_cipher_iv_length($encryptMethod);
$iv = openssl_random_pseudo_bytes($ivLength, $isStrong);
if (false === $iv && false === $isStrong) {
die('IV generate failed');
}
// 加密
$encrypted = openssl_encrypt($data, $encryptMethod, 'secret', 0, $iv);
// 解密
$decrypted = openssl_decrypt($encrypted, $encryptMethod, 'secret', 0, $iv);
详细解释一下:
第 1 行 指定了加密算法。比如这段代码使用 aes-256-cbc 算法加密。其实PHP的OpenSSL扩展支持很多种加密算法,想知道所有对称加密算法名称列表,可以调用 openssl_get_cipher_methods()
函数,这会返回一个数组:
array(
0 => 'AES-128-CBC',
1 => 'A