- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试应用 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-crypto和 hmac-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/
我正在尝试在 Elixir 中编写亚马逊产品广告 API 客户端。开发者指南描述了 the process for signing an API request其中必须使用请求和“ secret 访问
我在AIX上运行脚本时遇到以下错误 Reading configuration data /ecmsq1vg1/home1/aradmin/.ssh/config Reading configurat
见 OpenSSL::HMAC documentation . 我正在尝试这个: require "openssl" puts OpenSSL::HMAC.hexdigest(:sha256, "se
我正在使用 https://github.com/DaGenix/rust-crypto并且有一些奇怪的错误: extern crate crypto; use crypto::sha2::{Sha2
我们有一个 python 网络服务。它需要一个散列作为参数。python中的hash就是这样生成的。 hashed_data = hmac.new("ant", "bat", hashlib.
这将是一个很长的问题,但我有一个非常奇怪的错误。我在 C++ 中使用 OpenSSL 来计算 HMAC,并将它们与使用 javax.crypto.Mac 的模拟实现进行比较。对于某些 key ,HMA
我在我的代码中发现了一个巨大的问题,我完全不知道是什么导致了这个问题。 所以,当我向我的服务器发送请求时,我对请求中的字符串进行哈希处理。这有时是用户输入。 我的应用是多语言的,所以我必须支持所有“ä
我想弄清楚为什么 openssl 中的 hmac 没有给我与 java 中的 hmac 相同的结果。 在开放的 ssl 中 echo -n "Hello" | openssl dgst -sha256
与: KEY='7vgd39eyxald9sucClM7' DATA='POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/cla
我正在尝试转换一个 secret 的 hmac 字符串,以允许我在 postman 中测试我的 api。 Postman 预装了 cryptojs。这是我在我的测试服务器上使用加密的过程: const
Security.Cryptography.HMACSHA256.Create() 和 Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA
图例 我公开了一个 API,它要求客户端通过发送两个 header 来签署请求: Authorization: MyCompany access_key: Unix-TimeStamp: 要创建签名
我在 Android 上遇到一些 HMAC 问题。我将 SHA1 算法与以下代码一起使用,在搜索 android hmac-sha1 时会在整个网络上显示。 String base_s
HS256 和 HS512 加密算法之间是否存在实际差异,或者与已经牢不可破的 key 相比,更长的 key 是否多余?我应该使用哪一个来加密 JWT token ? 是否有可能将 HS512 加密与
我需要使用 SHA512 加密的 cHMAC 我使用此方法获得的加密值和服务器端值不匹配他们使用 Java 的服务器端可以请帮助我解决这个问题。 服务器端加密值是 85d86c928825ef85d5
我从https://www.rfc-editor.org/rfc/rfc6238借用了HMAC-SHA1 Java代码并略微调整以对其进行硬编码,以使用具有已知输出的一对已知 key /消息。 然后我
我正在用 go 开发一个网络服务器, 在顶部我有 import ("net/http" "log" "fmt" "encoding/json" "encoding/he
使用 Node.js 加密模块时 const crypto = require('crypto'); HMACseed = crypto.createHmac('sha512', 'a55e3
我正在寻找用于密码加密的正确 Java 算法,我发现 Java SDK 提供了 PBKDF2WithHmacSHA1,但没有提供 PBKDF2WithHmacSHA256。 我听说 HMAC-SHA2
所以我一直在查看维基百科的 HMAC 伪代码,它看起来相对简单;如果您的 key 大小已经是块大小,则伪代码可归结为 3 行: o_key_pad ← key xor [0x5c * bloc
我是一名优秀的程序员,十分优秀!