查询

openssl_cms_sign()函数—用法及示例

「 创建一个 CMS (Cryptographic Message Syntax) 签名 」


函数名称:openssl_cms_sign()

适用版本:PHP 5 >= 5.4.0, PHP 7

函数说明:openssl_cms_sign() 函数用于创建一个 CMS (Cryptographic Message Syntax) 签名。

语法:openssl_cms_sign(string $input, string &$output, mixed $signcert, mixed $privkey, array $headers [, int $flags = 0])

参数:

  • $input:要签名的输入数据,可以是字符串或文件路径。
  • &$output:签名结果的输出变量。
  • $signcert:用于签名的证书,可以是字符串或 X.509 证书资源。
  • $privkey:用于签名的私钥,可以是字符串或私钥资源。
  • $headers:签名时添加的头部信息,是一个包含键值对的数组。
  • $flags:可选参数,用于设置签名的行为标志。

返回值:成功时返回 TRUE,失败时返回 FALSE。

示例:

// 创建一个 CMS 签名
$input = "This is the input data to be signed";
$output = null;
$signcert = file_get_contents('signcert.pem');
$privkey = openssl_pkey_get_private('privatekey.pem');
$headers = array(
    'Content-Type' => 'text/plain',
    'Date' => '2022-01-01',
);

if (openssl_cms_sign($input, $output, $signcert, $privkey, $headers)) {
    echo "CMS signature created successfully.\n";
    file_put_contents('signed_data.cms', $output);
} else {
    echo "Failed to create CMS signature.\n";
}

// 验证 CMS 签名
$cmsdata = file_get_contents('signed_data.cms');
$verifycert = file_get_contents('verifycert.pem');

if (openssl_cms_verify($cmsdata, CMS_NOINTERN | CMS_NOCERTS, $verifycert)) {
    echo "CMS signature is valid.\n";
} else {
    echo "CMS signature is invalid.\n";
}

以上示例中,首先使用 openssl_cms_sign() 函数创建一个 CMS 签名,将签名结果保存到文件 signed_data.cms 中。然后使用 openssl_cms_verify() 函数验证该 CMS 签名的有效性,使用的验证证书为 verifycert.pem。

补充纠错
上一个函数: openal_source_stop()函数
下一个函数: openssl_dh_compute_key()函数
热门PHP函数
分享链接