Я пытаюсь применить HMAC-SHA1 для проверки некоторого содержимого, но не могу заставить его работать.
Вот тесты, которые у меня есть:
#[cfg(test)]
mod tests {
use crypto::hmac::Hmac;
use crypto::mac::Mac;
use crypto::sha1::Sha1;
use std::str::from_utf8;
const BODY_CONTENT: &'static str = r#"bodystring"#;
const KEY: &[u8] = b"secret_key";
const COMPUTED_HMAC: &'static str = "97049623b0e5d20bf6beb5313d80600e3d6abe56";
#[test]
fn test_hmac_sha1() {
let mut mac= Hmac::new(Sha1::new(), KEY);
mac.input(BODY_CONTENT.as_bytes());
let result = mac.result();
let code = result.code();
assert_eq!(COMPUTED_HMAC.as_bytes(), code);
assert_eq!(COMPUTED_HMAC, from_utf8(&code).unwrap_or("failed"));
}
#[test]
fn test_hmac_sha1_direct() {
let hash = hmacsha1::hmac_sha1(KEY, BODY_CONTENT.as_bytes());
assert_eq!(COMPUTED_HMAC.as_bytes(), hash);
assert_eq!(COMPUTED_HMAC, from_utf8(&hash).unwrap_or("failed"));
}
}
Я использовал этот веб-сайт, чтобы получить COMPUTED_HMAC
с помощью одной строки (BODY_CONTENT
) и секретный ключ (KEY
).
Как видите, я пытаюсь использовать как rust-crypto, так и hmac-sha1, и я получаю тот же результат с обоими из них.
Дело в том, что этот результат не совпадает с тем, что я получаю на сайте (97049623b0e5d20bf6beb5313d80600e3d6abe56
), и тесты не проходят. Вы можете подумать, что веб-сайт неправильный, но это не так, поскольку я использую его для проверки некоторых других хэшей, сгенерированных Github (я работаю в приложении Github), и он работает.
Тогда, очевидно, мне здесь не хватает какого-то шага, но я не могу его понять и буду очень признателен за вашу помощь.