duanmeng2842 2017-09-20 14:54
浏览 37
已采纳

使用私有X509密钥签署xml数据类型

I need to sign an xml data type with a private X509 key Here is the code I've used: $data->save("test.xml");

$data = new DOMDocument("1.0", "utf-8");
$xml_order = $data->createElement("order");
$xml_tag1 = $data->createElement("signature","000");
$xml_tag2 = $data->createElement("service","000");
$xml_tag3 = $data->createElement("url");
$xml_tag_confirm = $data->createElement("confirm","yes");

$attr = $data->appendChild( $xml_order);
$attr->appendChild($xml_tag1);
$attr->appendChild($xml_tag2);
$url = $attr->appendChild($xml_tag3);
$url->appendChild($xml_tag_confirm);
$attr->setAttribute("type","ama");
$attr->setAttribute("id", "passwordiguess");
$attr->setAttribute("date", date("YmdHis"));
$signature;
$pkeyid = openssl_pkey_get_private(file_get_contents('./private.key'));
$keyData = openssl_pkey_get_details($pkeyid);
openssl_sign($data, $signature, $pkeyid);
openssl_free_key($pkeyid);

The error that it returns is:

Warning: openssl_sign() expects parameter 1 to be string, object given in C:\xampp\htdocs\test\index.php on line 32

  • 写回答

1条回答 默认 最新

  • dtdfj08626 2017-09-20 15:28
    关注

    well the problem is you are passing a file as a parameter , instead of a string in openssl_sign function

    You should convert you xml document to string, try adding this line

     $data = new DOMDocument("1.0", "utf-8");
     $xml_order = $data->createElement("order");
     $xml_tag1 = $data->createElement("signature","000");
     $xml_tag2 = $data->createElement("service","000");
     $xml_tag3 = $data->createElement("url");
     $xml_tag_confirm = $data->createElement("confirm","yes");
    
     $attr = $data->appendChild( $xml_order);
     $attr->appendChild($xml_tag1);
     $attr->appendChild($xml_tag2);
     $url = $attr->appendChild($xml_tag3);
     $url->appendChild($xml_tag_confirm);
     $attr->setAttribute("type","ama");
     $attr->setAttribute("id", "passwordiguess");
     $attr->setAttribute("date", date("YmdHis"));
     /* this would convert the xml document to string  */
     $output = $data->saveXML();
     $signature;
     $pkeyid = openssl_pkey_get_private(file_get_contents('./private.key'));
     $keyData = openssl_pkey_get_details($pkeyid);
     /* then pass the $output to  openssl_sign*/
     openssl_sign($output, $signature, $pkeyid);
     openssl_free_key($pkeyid);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行