It took me a while to find out the correct way how to decrypt and verify data with these functions.
I needed that to communicate with German Health Insurance Providers as part of a DiGA. Maybe someone finds that useful.
<?php
function decryptAndVerify($signedAndEncryptedRawData): string
{
$tempDir = __DIR__ . '/tmp';
$originalFile = tempnam($tempDir, 'original');
$decryptedFile = tempnam($tempDir, 'decrypted');
$verifiedFile = tempnam($tempDir, 'verified');
file_put_contents($originalFile, $signedAndEncryptedRawData);
// One file with all possible certificates one after the other
// -----BEGIN CERTIFICATE----- ...-----END CERTIFICATE-----
$allPossibleSenderCertificates = __DIR__ . '/untrusted.pem';
// Certificate:
// Data:
// Version: 3 (0x2)...
$myCertificate = file_get_contents(__DIR__ . '/my.crt');
$myPrivateKey = openssl_pkey_get_private(
// -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
file_get_contents(__DIR__ . '/my.prv.key.pem')
);
openssl_cms_decrypt(
input_filename: $originalFile,
output_filename: $decryptedFile,
certificate: $myCertificate,
private_key: $myPrivateKey,
encoding: OPENSSL_ENCODING_DER
);
openssl_cms_verify(
input_filename: $decryptedFile,
flags: OPENSSL_CMS_BINARY | OPENSSL_CMS_NOSIGS | OPENSSL_CMS_NOVERIFY,
ca_info: [],
untrusted_certificates_filename: $allPossibleSenderCertificates,
content: $verifiedFile,
encoding: OPENSSL_ENCODING_DER
);
return file_get_contents($verifiedFile);
}
PHP.mk документација
openssl_cms_decrypt
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
function.openssl-cms-decrypt.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
function.openssl-cms-decrypt.php
openssl_cms_decrypt
Референца за `function.openssl-cms-decrypt.php` со подобрена типографија и навигација.
openssl_cms_decrypt
(PHP 8)
openssl_cms_decrypt — Дешифрирај CMS порака
= NULL
openssl_cms_decrypt(
string
string
Иницијализира контекст за инкрементално хеширање OpenSSLCertificate|string
Иницијализира контекст за инкрементално хеширање OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|null
int
): bool
string
$input_filename,string
$output_filename,Иницијализира контекст за инкрементално хеширање OpenSSLCertificate|string
$certificate,Иницијализира контекст за инкрементално хеширање OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|null
$private_key = null,int
$encoding = OPENSSL_ENCODING_SMIME): bool
Ги дешифрира CMS пораките.
Параметри
input_filename-
Името на датотеката што содржи шифрирана содржина.
output_filename-
Името на датотеката за депонирање на дешифрираната содржина.
certificate-
Името на датотеката што содржи сертификат на примачот.
private_key-
Името на датотеката што содржи а PKCS#8 клуч.
encoding-
Кодирањето на влезниот датотека. Еден од
OPENSSL_ENCODING_SMIME,OPENSSL_ENCODING_DERorOPENSSL_ENCODING_PEM.
Белешки од корисници 1 белешка
). Претходно, се користеше PKCS7/CMS ( ¶
пред 5 години