gpt4 book ai didi

ruby - 如何在 ruby​​ 中进行 xml 签名

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:22 26 4
gpt4 key购买 nike

我需要使用 ruby​​ 对 xml 进行签名,有人知道这方面的任何方法或库吗?

我的 xml 骨架是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Message>
<MessageId>
<ServiceId>service</ServiceId>
<Version>1.0</Version>
<MsgDesc>Service Description</MsgDesc>
<Code>4</Code>
<FromAddress>from</FromAddress>
<ToAddress>to</ToAddress>
<Date>2012-10-29</Date>
</MessageId>
<MessageBody/>

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>??????</DigestValue>
</Reference>
</SignedInfo>

<SignatureValue>????????????</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>????????</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</message>

我为 DigestValue 尝试了这段代码并且我已经测试了它,将它与我的 java 示例进行了比较,但是 DigestValue 与我的 java 示例的响应不匹配:

require 'base64'
require 'openssl'

to_sign_xml = File.read 'service.xml'
digest = OpenSSL::Digest::SHA1.digest(to_sign_xml)

digest = Base64.encode64(digest.to_s).gsub(/\n/, '')
raise digest.inspect

我的文件 service.xml 包含:

<Message>
<MessageId>
<ServiceId>service</ServiceId>
<Version>1.0</Version>
<MsgDesc>Service Description</MsgDesc>
<Code>4</Code>
<FromAddress>from</FromAddress>
<ToAddress>to</ToAddress>
<Date>2012-10-29</Date>
</MessageId>
<MessageBody/>
<Message>

最佳答案

如果您仍然感兴趣,我一周前制作了这个 gem 。它仍在开发中,但基本的东西已经实现。此 gem 已针对使用 xmlsec 库创建的签名进行测试。 http://www.aleksey.com/xmlsec/

我目前正在积极使用这个 gem,所以应该会相对快速地修复错误。

https://rubygems.org/gems/xmldsig

关于ruby - 如何在 ruby​​ 中进行 xml 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com