OpenSSL_encrypt函数用于对数据进行加密,它接受四个参数:要加密的数据、加密算法、加密密钥和加密选项。其中,加密算法可以是AES-128-CBC、AES-192-CBC、AES-256-CBC等,加密密钥是一个字符串,加密选项可以是OPENSSL_RAW_DATA或OPENSSL_ZERO_PADDING。 示例代码如下: 代码语言:php 复制
$cipher = "DES-ECB"; $options = OPENSSL_RAW_DATA; // 加载 OpenSSL 3.0 遗留 Provider(兼容 DES) openssl_set_legacy_provider(); $encrypted = openssl_encrypt($string, $cipher, $key, $options); return base64_encode($encrypted); } /** * 临时启用 OpenSSL 3.0 的遗留 Provider */ function ...
$result =openssl_encrypt($data, $method, $passwd, OPENSSL_RAW_DATA); var_dump(base64_encode($result)); 这时结果是 string(32)"kQYOdswcm9I5elv2wdJucplqAgqDNqXg" 解密 result =openssl_encrypt($data, $method, $passwd, OPENSSL_RAW_DATA); var_dump(openssl_decrypt($result, $method, $passwd...
其中OPENSSL_RAW_DATA的含义应该是不经过base64_encode,即raw data。如果没有这个掩码,则会返回base64字符串。 而默认的填充是PKCS#7。经过查询,OPENSSL_ZERO_PADDING这个选项在PHP新版本(7.4.4),已经被废弃了,效果跟OPENSSL_NO_PADDING效果一样。 总结: 0 : 默认值,PKCS#7进行填充, 返回的数据经过 base64 编...
我们可以看到:默认填充方式与OPENSSL_RAW_DATA,这两种方式加密结果是一样的 (3) OPENSSL_ZERO_PADDING方式 看字面意思,是用0填充,但是测试并不起作用 加密 $result = openssl_encrypt($data, $method, $passwd, OPENSSL_ZERO_PADDING); var_dump($result); ...
$data = "Hello, World!"; // 加密数据 $encrypted = openssl_encrypt($data, 'DES-EDE3-CBC', $key, OPENSSL_RAW_DATA, $iv); // 解密数据 $decrypted = openssl_decrypt($encrypted, 'DES-EDE3-CBC', $key, OPENSSL_RAW_DATA, $iv); ...
但在PHP7及以上版本,mcrypt扩展已被废弃,不再作为官方支持。上述示例如何在PHP7以上的版本实现呢? echo base64_encode(openssl_encrypt($price, 'AES-128-ECB', $enc_key, OPENSSL_RAW_DATA)); 使用openssl库,这样实现,输出的结果跟低版本的不一致是什么原因呢?
openssl_encrypt($data, $method, $password, $options, $iv) 1. 参数说明: $data 加密明文 $method 加密方法 这里使用AES-256-CBC $passwd 加密密钥 $options 数据格式选项(可选)OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING,OPENSSL_NO_PADDING $iv 密初始化向量(可选) ...
return $data; } } 2.3 options openssl_encrypt和openssl_decrypt的第三个参数是options,它有着很重要的作用,我们来了解一下。 0:默认模式,自动进行 pkcs7 补位,同时自动进行 base64 编码 1:OPENSSL_RAW_DATA,自动进行 pkcs7 补位, 但是不自动进行 base64 编码 ...
PHP7.4将mcrypt_encrypt升级为openssl_encrypt,加密结果不一致的问题?目前是PHP7.4环境下,运行会报错...