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

时间:2016-02-22 10:56:42

标签: php pkcs#7

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

对于加密,他们提供了pem文件来加密数据以生成带有base 64编码的PKCS7格式的签名。

所以请告诉我如何进行加密,我正在用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==

但它不是从远程接受的。请帮帮我

谢谢

1 个答案:

答案 0 :(得分:0)

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

因此使用openssl_pkcs7_sign()代替加密。