函数名称:openssl_cms_read()
函数描述:openssl_cms_read() 函数用于从一个 PKCS7/CMS 编码的数字信封中解析出原始的加密数据和签名信息。
适用版本:PHP 5 >= 5.1.2, PHP 7
语法:openssl_cms_read(string $input, array &$certificates, array &$crls, int $flags = 0)
参数:
- $input:要解析的 PKCS7/CMS 编码的数字信封。
- &$certificates:一个数组,用于存储从数字信封中提取出的证书链。
- &$crls:一个数组,用于存储从数字信封中提取出的证书吊销列表。
- $flags:可选参数,用于指定解析标志。默认为 0。
返回值:如果成功解析数字信封,则返回原始的加密数据和签名信息的数组。如果解析失败,则返回 FALSE。
示例:
<?php
// 加载 PKCS7/CMS 编码的数字信封文件
$input = file_get_contents('encrypted.p7');
// 创建空数组来存储证书链和证书吊销列表
$certificates = [];
$crls = [];
// 解析数字信封并提取原始的加密数据和签名信息
$data = openssl_cms_read($input, $certificates, $crls);
if ($data !== false) {
// 输出解析成功的原始加密数据
echo $data['data'];
// 输出解析成功的签名信息
echo $data['signatures'][0]['signature'];
// 输出解析成功的证书链
foreach ($certificates as $certificate) {
echo openssl_x509_export($certificate);
}
// 输出解析成功的证书吊销列表
foreach ($crls as $crl) {
echo openssl_crl_export($crl);
}
} else {
echo "解析数字信封失败";
}
?>
注意事项:
- 在使用 openssl_cms_read() 函数之前,需要确保 OpenSSL 扩展已经正确安装和启用。
- 数字信封通常以二进制格式存储,因此可以使用 file_get_contents() 函数加载数字信封文件。
- 解析成功后,可以通过访问返回数组中的相应字段来获取原始的加密数据、签名信息、证书链和证书吊销列表。
- 证书链和证书吊销列表存储在传递给函数的引用参数中,因此需要创建相应的空数组来接收解析结果。