Amazon s3测试套件REST API签名计算

时间:2018-10-17 09:06:03

标签: amazon-web-services amazon-s3 windev

我正在努力在我们的应用程序中实现Amazon REST API。该应用程序是使用WinDev构建的。为了也测试我的签名计算,我决定尝试亚马逊提供的测试套件: https://docs.aws.amazon.com/general/latest/gr/signature-v4-test-suite.html

这是我如何得出规范请求的十六进制值的方法:

{
    "cmd": ["make", "&&", "start", "cmd", "/c", "${file_path}/${file_base_name}.exe"],
    "file_regex": "^(..[^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${folder:${project_path:${file_path}}}",
    "selector": "source.makefile",
    "syntax": "Packages/Makefile/Make Output.sublime-syntax",
    "keyfiles": ["Makefile", "makefile"],
    "shell": true,

    "variants":
    [
        {
            "name": "Clean",
            "shell_cmd": "make clean"
        }
    ]
}

方法HashCanoncialRequest删除所有字符10(这样做是为了正确地对字符串进行哈希处理),使用windev的hashstring函数将字符串哈希为二进制。该二进制函数被转换为十六进制值,所有空白都被删除并更改为小写。

sCanonicalRequestHash = :HashCanonicalRequest([
    GET
    /
    Param1=value1&Param2=value2
    host:example.amazonaws.com
    x-amz-date:20150830T123600Z

    host;x-amz-date
    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
])

这将产生以下值: 816cd5b414d056048ba4f7c5386d6e0533120fb1fcfa93762cf0fc39e2cf19e0

这是测试套件期望的值。到目前为止,一切都很好。

接下来是要签名的字符串,如下所示:

//Remove char 13 ,otherwise the hash fails( Windows enter )
sResult = Replace(sResult, Charact(13), "")
//Create hash
sResult = HashString(HA_SHA_256, sResult)
//Convert hash to lower case hex
sResult = Lower(BufferToHexa(sResult, 1, 32))
//Remove spaces
sResult = Replace(sResult," ", "")

现在是时候计算签名密钥了。 首先测试套件提供的一些值:

AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
816cd5b414d056048ba4f7c5386d6e0533120fb1fcfa93762cf0fc39e2cf19e0

现在计算:

sSecret                    is string = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"
    sDate                   is string = "20150830"
    sRegion                 is string = "us-east-1"

Amazon也提供了不同的测试,以便也在此处检查您的计算,该计算经过测试并返回预期值。

现在不执行测试套件所期望的部分。签名计算。

bufDateKey is Buffer = WL.HashString(HA_HMAC_SHA_256, sDate, "AWS4" + sSecret)
bufRegionKey is Buffer = WL.HashString(HA_HMAC_SHA_256, sRegion, bufDateKey)
bufServiceKey is Buffer = WL.HashString(HA_HMAC_SHA_256, "service", bufRegionKey)
bufSigningKey is Buffer = WL.HashString(HA_HMAC_SHA_256, "aws4_request", bufServiceKey)

ss是要签名的字符串的字符串值,如第三个代码片段所示 bufSigningKey是最后一个代码片段的结果的二进制值。这将转换为十六进制,并删除所有空白,并将字符串转换为小写。这不会返回测试套件所示的签名。

如果希望有人可以提供帮助。

0 个答案:

没有答案