(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_seal — 密封 (加密) 数据
$data,&$sealed_data,&$encrypted_keys,$public_key,$cipher_algo,&$iv = null
openssl_seal() 使用指定 cipher_algo 和随机生成的密钥密封(加密)data。使用
public_key 数组中的每个公钥对秘钥加密,并在 encrypted_keys 返回每个加密的 envelope 密钥。
这允许将密封的数据发送给多个接收方(前提是公钥可用)。每个接收方都必须同时接收加密的数据和用接收方的公钥加密的 envelope 密钥。生成 IV(初始化向量),并在
iv 中返回其值。
data要密封的数据。
sealed_data被密封后的数据。
encrypted_keys已被加密的密钥数组。
public_key包含公钥的 OpenSSLAsymmetricKey 实例数组。
cipher_algo加密算法。
默认值在 PHP 8.0 之前为('RC4'),这不安全。强烈建议明确指定安全密码方法。
iv
用于解密 data 的初始化向量。如果密码方法需要 IV,则需要它。可以通过调用 openssl_cipher_iv_length() 时传入 cipher_algo 来找到它。
IV 无法明确设置。其中设置的任何值都将被随机生成的值覆盖。
成功时返回密封后数据的长度,错误为 false。
如果密封后的数据成功地通过 sealed_data 变量返回,那么信封密钥也将会通过 encrypted_keys 变量返回。
| 版本 | 说明 |
|---|---|
| 8.0.0 |
public_key 现在接受 OpenSSLAsymmetricKey
实例 array;之前接受类型 OpenSSL key 的 resource 数组。
|
| 8.0.0 |
cipher_algo 不再是可选参数。
|
| 8.0.0 |
iv 现在可为 null。
|
示例 #1 openssl_seal() 示例
<?php
// 假设 $data 包含要密封的数据
$data = "test";
// 获取公钥
$pk1 = openssl_get_publickey("file://cert1.pem");
$pk2 = openssl_get_publickey("file://cert2.pem");
// 密封消息,只有 $pk1 和 $pk2 的所有者才能分别使用密钥
// $ekeys[0] 和 $ekeys[1] 解密 $sealed。
if (openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2), 'AES256', $iv) > 0) {
// 可能存储 $sealed 和 $iv 值并稍后在 openssl_open 中使用
echo "success\n";
}
?>