PHP7 OpenSSL DES-EDE-CBC加解密

介绍

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变量表示初始化向量。

后端开发标签