函式名稱: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() 函式載入數字信封檔案。
- 解析成功後,可以透過訪問返回陣列中的相應欄位來獲取原始的加密資料、簽名資訊、證書鏈和證書吊銷列表。
- 證書鏈和證書吊銷列表儲存在傳遞給函式的引用引數中,因此需要建立相應的空陣列來接收解析結果。