查詢

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函式
分享連結