介绍
PHP7 OpenSSL库中提供了DES-EDE-CBC算法的加密与解密实现。DES-EDE是“Triple DES”即“三重DES”的简称,即将3个DES算法串在一起执行。
DES-EDE-CBC加密
步骤1:生成密钥
生成一个24字节的密钥,可以通过以下方式生成:
$key = openssl_random_pseudo_bytes(24);
步骤2:加密数据
调用openssl_encrypt()函数使用DES-EDE-CBC算法对数据进行加密,具体参数如下:
$string = 'this is a secret message';
$cipher_method = 'des-ede3-cbc';
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher_method));
$encrypted = openssl_encrypt($string, $cipher_method, $key, OPENSSL_RAW_DATA, $iv);
其中,$cipher_method参数表示加密方式,$iv参数表示初始化向量。注意:$iv参数必须是随机生成的,而且不能与对称加密的密钥相同。
步骤3:转换为16进制字符串
将加密后的二进制数据转换为16进制字符串,可以使用bin2hex()函数进行转换:
$hex = bin2hex($encrypted);
步骤4:输出结果
将16进制字符串输出,可以使用echo语句或者其他的方式进行输出:
echo $hex;
DES-EDE-CBC解密
步骤1:转换为二进制数据
将16进制字符串转换为二进制数据,可以使用hex2bin()函数进行转换:
$binary = hex2bin($hex);
步骤2:解密数据
调用openssl_decrypt()函数使用DES-EDE-CBC算法对数据进行解密,具体参数如下:
$decrypted = openssl_decrypt($binary, $cipher_method, $key, OPENSSL_RAW_DATA, $iv);
步骤3:输出结果
将解密后的数据输出,可以使用echo语句或者其他的方式进行输出:
echo $decrypted;
完整代码示例
下面是使用DES-EDE-CBC算法进行加密与解密的完整代码示例:
$key = openssl_random_pseudo_bytes(24);
$string = 'this is a secret message';
$cipher_method = 'des-ede3-cbc';
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher_method));
$encrypted = openssl_encrypt($string, $cipher_method, $key, OPENSSL_RAW_DATA, $iv);
$hex = bin2hex($encrypted);
echo 'Encrypted: '.$hex."\n";
$binary = hex2bin($hex);
$decrypted = openssl_decrypt($binary, $cipher_method, $key, OPENSSL_RAW_DATA, $iv);
echo 'Decrypted: '.$decrypted."\n";
其中,$key变量表示密钥,$string变量表示待加密的字符串,$cipher_method变量表示加密算法,$iv变量表示初始化向量。