2011-05-19 53 views
3

簽名請求我做了一個測試套件數學:hmac_ * KRL功能。我將KRL結果與Python結果進行比較。 KRL給了我不同的結果。KRL:與HMAC_SHA1

代碼:https://gist.github.com/980788結果:http://ktest.heroku.com/a421x68

我怎樣才能得到KRL有效簽名?我假設他們的Python結果是正確的。

UPDATE:除非你想在消息中換行字符,它工作正常。如何簽名包含換行符的字符串?

+0

StackOverflow是一個問題和答案網站。你的問題是什麼?如果這不是問題,您應該通過他們提供的溝通渠道聯繫Kynetx。 – 2011-05-19 17:09:55

+0

好點,抱歉沒有問題。編輯修復。 – 2011-05-19 17:22:22

+0

cf https://convore.com/kynetx/hmac-test-cases/ – 2011-05-19 17:22:45

回答

2

我懷疑你的Python庫SHA返回不同的編碼由b64encode庫預期。我的庫在一次調用中同時執行SHA和base64,因此我需要做一些額外的工作來檢查結果。如您在KRL中顯示的,正確的語法是:
math:hmac_sha1_base64(raw_string,key);
數學:hmac_sha256_base64(raw_string,密鑰);

這些用,我使用亞馬遜模塊,目前正在測試精細的同一個庫。

爲了具體測試那些例程,我使用了RFC(sha1sha256)的測試向量。我們不支持原生的十六進制,所以我不能夠使用所有的測試向量,但我可以用一個簡單的:

HMAC SHA1

test_case = 2
鍵= 「人Jefe」
key_len = 4
數據= 「做雅想要的東西白白?」
DATA_LEN = 28
消化= 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79

HMAC SHA256

重點= 4a656665( 「人Jefe」)
數據= 7768617420646f2079612077616e7420666f72206e6f7468696e673f(「做雅想要的東西白白?「)
HMAC-SHA-256 = 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843

這是我的代碼:

​​

變種HMAC_SHA1 = 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79';
變種hmac_sha1_64 = '7/zfauXrL6LSdBbV8YTfnCWafHk';
var bhs256c ='5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843';
var b 'hs256c64 ='W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM';

SHA1和SHA256的HEX結果與簡單情況的測試向量相匹配。

7/zfauXrL6LSdBbV8YTfnCWafHk =
W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM =

我通過解碼HEX結果,並把它們通過的base64編碼器here

我的結果是所測試的BASE64結果它們分別與我的HMAC SHA1 base64和HMAC SHA256 base64的計算結果相匹配。

如果你仍然有問題,你能否分別向我提供python的base64和SHA結果,以便我可以識別斷開連接?

+0

我的問題似乎是'\ n'。如果我在<< >>內使用實際的換行符,我會得到正確的十六進制值。 base64的不完全正確(遺漏了'='的結尾,請訪問http://ktest.heroku.com/a421x68查看更新結果。 – 2011-05-20 04:55:02

+0

是的,對於base64,庫不會填充到4的倍數。這是這是文檔中省略的摘要函數的重要腳註:重要提示:這些不會將BASE64輸出填充到4的倍數! 請參閱:http://search.cpan.org/~mshelor/Digest-SHA- 5.61/lib目錄/摘要/ SHA.pm#PADDING_OF_BASE64_DIGESTS – MEH 2011-05-23 21:15:39