使用 PKCS7 格式的数字签名和 base 64 编码加密数据


Encrypt Data by using Digital signature in PKCS7 format with base 64 encoding

我们正在编写以使用 API 验证用户数据。出于验证目的,我需要在 post 方法调用中传递两个变量,两个变量是数据和签名。因此,使用base64编码的PKCS7格式的数据数字签名。

为了加密,他们提供了 pem 文件来加密数据以生成 PKCS7 格式的签名,并使用 base 64 编码。

所以请告诉我如何进行此加密,我正在用PHP进行此项目。

我也尝试使用以下代码但没有结果

$data = 'Test Data';
$key = file_get_contents("certificate.pem");
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
openssl_pkcs7_encrypt("msg.txt", "enc.txt", $key,[]);

输出:

MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIICCgYJKoZIhvcNAQcDoIIB+zCCAfcCAQAxggG1MIIBsQIBADCBmDCBkDELMAkG
A1UEBhMCSU4xKjAoBgNVBAoTIWVNdWRocmEgQ29uc3VtZXIgU2VydmljZXMgTGlt
aXRlZDEdMBsGA1UECxMUQ2VydGlmeWluZyBBdXRob3JpdHkxNjA0BgNVBAMTLWUt
TXVkaHJhIFN1YiBDQSBmb3IgQ2xhc3MgMyBPcmdhbmlzYXRpb24gMjAxNAIDI2nL
MA0GCSqGSIb3DQEBAQUABIIBAEoKNU5O/NSlM62cVyq1CJ2qN6VA0kDRJaJVrUze
Tbd8OJZdzdcn3T+ZNh2myDRliW3B8Q+u4qZN8NZ1GM9e5OkmdxgWPD0wDhUZyMhu
796XOIdlZVLlyaNDr/QGYb4XxFrsJAqMXYFh3QPIATHhpaBGTnlB2fvFwtLSHocv
TzGT/UgL9aS3BiDh/S7sULsOXZoMNlHP4rnzRnjRsU+QJogtYnKBXGcKuzxeXRDL
dd7OxHTDgf4MFJcBdwdk6xwtbrVfyNCnIwzzFC4UwR5I/w6js+sBTg+EXAcCZqtG
rouNxu+SBkYMh63r+5LX0C8rL6xp6jzt49dgttKxh8Q+xc0wOQYJKoZIhvcNAQcB
MBoGCCqGSIb3DQMCMA4CAgCgBAiKcFDFzN93RIAQprj+fHrW8KA1XSSEY0fH3Q==

但它不接受远程。请帮助我

谢谢

在我看来

,您的 pem 文件包含证书 + 私钥,您需要签名而不是加密数据。

因此,使用openssl_pkcs7_sign()而不是加密。