函式名稱:openssl_cms_decrypt()
適用版本:PHP 5 >= 5.3.0, PHP 7, PHP 8
函式描述:openssl_cms_decrypt() 函式用於解密由 OpenSSL 加密的 CMS (Cryptographic Message Syntax) 格式的資料。
語法:openssl_cms_decrypt(string $input, string $output, mixed $certificate, mixed $private_key [, array $headers [, int $flags = 0]])
引數:
- $input:要解密的輸入資料,可以是檔案路徑或者是一個字串。
- $output:解密後的輸出資料,可以是檔案路徑或者是一個變數名。
- $certificate:用於解密的證書,可以是證書檔案路徑、證書字串或者是一個 OpenSSL X.509 證書資源。
- $private_key:用於解密的私鑰,可以是私鑰檔案路徑、私鑰字串或者是一個 OpenSSL 金鑰資源。
- $headers:可選引數,用於指定要解密的 CMS 格式的頭部資訊。
- $flags:可選引數,用於指定解密的標誌。預設為0。
返回值:成功時返回解密後的資料,失敗時返回 FALSE。
示例:
// 解密一個加密的 CMS 格式資料並將結果儲存到檔案中
$inputFile = 'encrypted.cms';
$outputFile = 'decrypted.txt';
$certificateFile = 'certificate.pem';
$privateKeyFile = 'private_key.pem';
$inputData = file_get_contents($inputFile);
$certificate = openssl_x509_read(file_get_contents($certificateFile));
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFile));
$decryptedData = openssl_cms_decrypt($inputData, $outputFile, $certificate, $privateKey);
if ($decryptedData !== false) {
echo '解密成功!解密後的資料已儲存到 ' . $outputFile;
} else {
echo '解密失敗!';
}
// 解密一個加密的 CMS 格式資料並將結果儲存到變數中
$inputData = 'encrypted.cms';
$certificateString = '-----BEGIN CERTIFICATE-----
MIIC...
-----END CERTIFICATE-----';
$privateKeyString = '-----BEGIN PRIVATE KEY-----
MIIE...
-----END PRIVATE KEY-----';
$certificate = openssl_x509_read($certificateString);
$privateKey = openssl_pkey_get_private($privateKeyString);
$decryptedData = openssl_cms_decrypt($inputData, $outputData, $certificate, $privateKey);
if ($decryptedData !== false) {
echo '解密成功!解密後的資料:' . $outputData;
} else {
echo '解密失敗!';
}
注意事項:
- 在使用 openssl_cms_decrypt() 函式之前,需要確保 OpenSSL 擴充套件已經安裝並啟用。
- 傳遞給函式的證書和私鑰引數可以是檔案路徑、字串或者是 OpenSSL 的證書或金鑰資源。
- 解密後的資料可以儲存到檔案中或者儲存到變數中,具體取決於輸出引數的型別。
- 錯誤處理:如果解密失敗,函式會返回 FALSE,可以使用 openssl_error_string() 函式獲取錯誤資訊。