gpt4 book ai didi

rust - Rust 中的 HMAC-SHA1

转载 作者:行者123 更新时间:2023-11-29 08:05:53 41 4
gpt4 key购买 nike

我正在尝试应用 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"));
}
}

我用过这个website为了使用一个字符串 (BODY_CONTENT) 和一个 key (KEY) 获取 COMPUTED_HMAC

如您所见,我正在尝试同时利用 rust-cryptohmac-sha1 crate ,我用它们都得到了相同的结果。

问题是此结果与我在网站上获得的结果不匹配 (97049623b0e5d20bf6beb5313d80600e3d6abe56),测试失败。您可能认为该网站是错误的,但事实并非如此,因为我正在使用它来验证 Github 生成的其他一些哈希值(我在 Github 应用程序中工作)并且它有效。

然后,很明显,我在这里遗漏了一些步骤,但我无法弄清楚,非常感谢您的帮助。

最佳答案

返回了正确的散列,只是不在您期望的表示中。哈希以原始字节形式返回,而不是以转换为 ASCII 十六进制数字的字节形式返回。

如果我们将哈希码数组打印为十六进制,如下所示:

println!("{:02x?}", code);

然后我们可以看到它匹配你的字符串:

[97, 04, 96, 23, b0, e5, d2, 0b, f6, be, b5, 31, 3d, 80, 60, 0e, 3d, 6a, be, 56]
// 97049623b0e5d20bf6beb5313d80600e3d6abe56

而字符串 "97049623b0e5d20bf6beb5313d80600e3d6abe56" 看起来像这样:

[39, 37, 30, 34, 39, 36, 32, 33, 62, 30, 65, 35, 64, 32, 30, 62, 66, 36, 62, 65,
62, 35, 33, 31, 33, 64, 38, 30, 36, 30, 30, 65, 33, 64, 36, 61, 62, 65, 35, 36]

使用 itertools ,我们可以像这样将前者转换为后者:

assert_eq!(
COMPUTED_HMAC,
code.iter().format_with("", |byte, f| f(&format_args!("{:02x}", byte))).to_string());

关于rust - Rust 中的 HMAC-SHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54619582/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com