pkcs7 签名 php 实现
第三方 java 代码中使用的 pkcs7 签名,现需在 php 中对其进行实现。
php 实现方法
php 中使用 openssl_pkcs7_verify 函数进行验签,具体实现方法如下:
openssl_pkcs7_verify($certfile, $signfile, $datafile, pkcs7_detached);
加签值排列
中国银行和中信银行要求加签值升序排列,可以使用 asort($argarr, sort_string) 函数进行排序。
完整示例
<?php function pkcs7Sign($data, $certFile, $privateKeyFile) { // 导入证书和私钥 $certData = file_get_contents($certFile); $privateKeyData = file_get_contents($privateKeyFile); $cert = openssl_x509_parse($certData); $privateKey = openssl_pkey_get_private($privateKeyData); // 签名数据 $signature = openssl_pkcs7_sign($data, 'temp.pem', $cert, $privateKey); // 读取签名文件 $signature = file_get_contents('temp.pem'); unlink('temp.pem'); // 将签名转成 base64 字符串 $signature = base64_encode($signature); return $signature; }
附
已完成代码中解除了对 / 路径分隔符转义,可选地址写法为 file:/tmp/cert.pem。
PHP 函数中的引用传递与值传递的优缺点
php函数测试与调试技巧:如何调试数据库问题?
PHP 使用 php-mqtt/client 连接 MQTT 服务器时,为什么出现“Call to undefined method PhpMqtt\Client\ConnectionSettings::setUsername()”错误?
PC端和APP端的消息模板保持一致是比较好的做法,这样可以确保用户在不同设备上的体验一致性。不过,在实际操作中,也可以根据不同平台的特性进行适当的调整。比如,PC端可能需要更详细的信息和更复杂的交互,而APP端则可能需要更简洁的设计和更快的响应速度。 所以,建议在保持核心内容一致的基础上,根据具体平台的用户习惯和技术特点进行优化。
php框架在金融领域应用中的自动化和人工智能
php框架的团队协作支持如何?