首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算内容摘要字段的离散性

计算内容摘要字段的离散性
EN

Stack Overflow用户
提问于 2022-11-08 18:09:08
回答 1查看 26关注 0票数 0

我试图在eBay的docs https://developer.ebay.com/develop/guides/digital-signatures-for-apis#sigin上计算内容摘要头的值。

当我试图根据我对规范的理解来计算示例有效载荷摘要头时,我得到了一个不同的值。我是否理解了规范的错误,还是文档中有错误?

内容摘要标题 注意:如果不包含HTTP有效负载(例如,对于GET调用),则不需要此报头。 当包含HTTP有效负载时,此报头在HTTP有效负载上提供一个SHA-256摘要。 若要添加内容摘要标题(如草案-ietf-httpbis-摘要-头-10中所指定的),请在HTTP有效负载上计算SHA-256摘要(以UTF-8字符编码)。虽然规范允许添加多个摘要(例如,SHA-256和SHA-512),但在本例中只需要SHA-256。 考虑以下有效载荷: {"hello": "world"} 在这种情况下,头的值为: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:

因此,根据规范,这个标头的关键是摘要算法(在示例中是sha-256),后面是=。该值是以utf-8编码的有效载荷的base64编码摘要。

下面是我在ruby中计算摘要的尝试

代码语言:javascript
复制
2.5.3 :022 > s = '{"hello": "world"}'.encode('utf-8')
 => "{\"hello\": \"world\"}"
2.5.3 :023 > s
 => "{\"hello\": \"world\"}"
2.5.3 :024 > puts s
{"hello": "world"}
 => nil
2.5.3 :025 > require 'digest'
 => true
2.5.3 :026 > digest = Digest::SHA2.new(256).hexdigest s
 => "5f8f04f6a3a892aaabbddb6cf273894493773960d4a325b105fee46eef4304f1"
2.5.3 :027 > require 'base64'
 => true
2.5.3 :028 > Base64.strict_encode64 digest
 => "NWY4ZjA0ZjZhM2E4OTJhYWFiYmRkYjZjZjI3Mzg5NDQ5Mzc3Mzk2MGQ0YTMyNWIxMDVmZWU0NmVlZjQzMDRmMQ=="

如您所见,基64编码摘要与示例完全不同。

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 16:57:23

因此,我解决了我的问题,并将在这里张贴的解决方案,为其他人。Content头(至少对于eBays SCA需求)是一个sha-256哈希utf-8编码字节数组,然后被转换为base64编码字符串。

代码语言:javascript
复制
2.5.3 :001 > require 'base64'
 => true
2.5.3 :002 > require 'digest'
 => true
2.5.3 :003 > s = '{"hello": "world"}'.encode('utf-8')
 => "{\"hello\": \"world\"}"
2.5.3 :005 > Digest::SHA256.base64digest s
 => "X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE="
2.5.3 :006 >

我在c#中需要这样的实现,所以我的实现如下所示

代码语言:javascript
复制
private void _addDigestHeader(HttpWebRequest request, string requestBody)
{
    byte[] hashBytes;
    using (var sha256Hash = SHA256.Create())
    {
        hashBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(xml.InnerXml));
    }
    var hashResult = Convert.ToBase64String(hashBytes);

    request.Headers.Add("content-digest", hashResult);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74365335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档