函式名稱: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。