我为数学做了一个测试套件:hmac_ * KRL功能。我将KRL结果与Python结果进行比较。 KRL给了我不同的结果。
代码:https://gist.github.com/980788结果:http://ktest.heroku.com/a421x68
如何从KRL获得有效签名?我假设他们的Python结果是正确的。
更新:除非您想在邮件中添加换行符,否则它可以正常工作。如何签署包含换行符的字符串?
答案 0 :(得分:2)
我怀疑你的python SHA库返回的编码与b64encode库所期望的编码不同。我的库在一次调用中同时执行SHA和base64,因此我需要做一些额外的工作来检查结果。
正如您在KRL中所示,正确的语法是:
数学:hmac_sha1_base64(raw_string,键);
数学:hmac_sha256_base64(raw_string,键);
这些库使用的是我用于亚马逊模块的相同库,目前正在进行测试。
为了具体测试这些例程,我使用了RFC(sha1,sha256)中的测试向量。我们本身不支持十六进制,所以我无法使用所有测试向量,但我能够使用一个简单的:
HMAC SHA1
test_case = 2
key =“Jefe”
key_len = 4
data =“你什么都不想要?” data_len = 28
digest = 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79
HMAC SHA256
Key = 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的HEX结果与简单情况的测试向量匹配。
我通过解码HEX结果并通过base64编码器here来测试base64结果
我的结果是:
7 / zfauXrL6LSdBbV8YTfnCWafHk =
W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM =
分别符合我对HMAC SHA1 base64和HMAC SHA256 base64的计算。
如果您仍然遇到问题,可以单独向我提供python的base64和SHA结果,以便识别断开连接吗?