KRL:使用 HMAC_SHA1 签署请求



我为math:hmac_* KRL函数做了一个测试套件。我将 KRL 结果与 Python 结果进行比较。KRL给了我不同的结果。

代码:https://gist.github.com/980788 结果:http://ktest.heroku.com/a421x68

如何从 KRL 获得有效签名?我假设他们的Python结果是正确的。

更新:除非您想要消息中的换行符,否则它可以正常工作。如何对包含换行符的字符串进行签名?

我怀疑您的python SHA库返回的编码与b64encode库预期的编码不同。我的库在一次调用中同时执行 SHA 和 base64,因此我需要做一些额外的工作来检查结果。

正如您在 KRL 中显示的,正确的语法是:
数学:hmac_sha1_base64(raw_string,键);
数学:hmac_sha256_base64(raw_string,键);

它们使用的库与我用于 Amazon 模块的库相同,该模块现在测试良好。

为了专门测试这些例程,我使用了来自 RFC 的测试向量(sha1, sha256)。 我们本身不支持十六进制,所以我无法使用所有的测试向量,但我能够使用一个简单的测试向量:

HMAC SHA1

test_case = 2
键 = "杰夫"
key_len = 4
数据 ="你什么都不想要?
data_len = 28
摘要 = 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79

HMAC SHA256

密钥 = 4a656665("Jefe")
数据 = 7768617420646f2079612077616e7420666f72206e6f7468696e673f("你什么都不想要?
HMAC-SHA-256 = 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843

这是我的代码:

global {  
        raw_string = "what do ya want for nothing?";  
        mkey = "Jefe";  
    }
rule first_rule {
        select when pageview ".*" setting ()
        pre {
            hmac_sha1 = math:hmac_sha1_hex(raw_string,mkey);
            hmac_sha1_64 = math:hmac_sha1_base64(raw_string,mkey);
            bhs256c = math:hmac_sha256_hex(raw_string,mkey);
            bhs256c64 = math:hmac_sha256_base64(raw_string,mkey);
        }
        {
        notify("HMAC sha1", "#{hmac_sha1}") with sticky = true;
        notify("hmac sha1 base 64", "#{hmac_sha1_64}") with sticky = true;
            notify("hmac sha256", "#{bhs256c}") with sticky = true;
            notify("hmac sha256 base 64", "#{bhs256c64}") with sticky = true;
        }
}

var hmac_sha1 = 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79';
var hmac_sha1_64 = '7/zfauXrL6LSdBbV8YTfnCWafHk';
var bhs256c = '5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843';
var bhs256c64 = 'W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM';

SHA1 和 SHA256 的十六进制结果与简单案例的测试向量匹配。

我通过解码十六进制结果并将它们通过 base64 编码器来测试 base64 结果

我的结果是:

7/zfauXrL6LSdBbV8YTfnCWafHk=
W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM=

这分别符合我对HMAC SHA1 base64和HMAC SHA256 base64的计算。

如果您仍然遇到问题,您能否分别向我提供来自 python 的 base64 和 SHA 结果,以便我识别断开连接?

相关内容

  • 没有找到相关文章