【问题标题】:Computing an HMAC-SHA signature计算 HMAC-SHA 签名
【发布时间】:2011-05-21 10:32:41
【问题描述】:

我正在为亚马逊的 SimpleDB 编写一个模块。他们要求使用 HMAC-SHA 算法对 REST 请求进行签名。 (Details here.)

有人告诉我有一个计算这个签名的函数,但我在documentation 中找不到它。调用的函数是什么,它的参数是什么样的?

【问题讨论】:

标签: amazon-simpledb krl hmac


【解决方案1】:

已编辑:以下应该可以工作:

pre {
  message = "Four score and seven years ago";
  key = "Abe Lincoln";
  signature = math:hmac_sha256_base64(message, key);
}
notify("Signature is", signature);

函数是math:hmac_sha256_base64(<datastring>,<keystring>)

【讨论】:

  • 谢谢,兰德尔。我仍然无法让它真正与 AWS 一起工作,但这是正确的语法。
【解决方案2】:

HMAC 是一个标准函数,可以在大多数平台的加密库中找到。亚马逊在您链接到的文档页面上显示了几个示例。

对于Java,你可以在javax.crypto.Mac找到它

对于.Net,请查看System.Security.Cryptography

对于KRL,我没有找到任何内置的库存解决方案。由于似乎可以嵌入 javascript,因此 jsSHA 实现可能很有用。数学库里有一个sha1函数,按照RFC2104实现HMAC似乎没那么难。

【讨论】:

  • 谢谢。我正在寻找有关 KRL 中函数的信息(因此是 KRL 标签)。
  • 哦,没听说过。看起来很有趣,如果我发现任何东西,我会环顾四周并更新我的答案。
【解决方案3】:

要使用嵌入式换行符(AWS 我在跟你说话!)对字符串进行签名,您必须执行以下操作(基于 AWS S3 示例)

pre {
  raw_string = uri:unescape("GET%0A%0A%0AWed, 28 Mar 2007 01:29:59 +0000%0A/");
  sample_key = "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o";
  signature = math:hmac_sha1_base64(raw_string, sample_key);
  expected = "Db+gepJSUbZKwpx1FR0DLtEYoZA=";
  passfail = (signature eq expected) => "pass" | "fail";
}

uri:decode() 函数返回一个带有正确换行符的字符串,而 \n\n\n 没有。您可能必须在签名中添加尾随“=”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多