gpt4 book ai didi

cryptography - 使用 PBKDF2 key 推导正确创建用户可读的 salt with rust-crypto

转载 作者:行者123 更新时间:2023-11-29 08:14:04 24 4
gpt4 key购买 nike

我目前正在为 Standard File 创建客户端,其中涉及使用 PBKDF2 来确保安全。我正在使用 rust-crypto,虽然我已经尝试过 ring 和 rust-openssl。

首先,您通过 /auth/param 端点从服务器检索盐、成本和版本号。我用 Serde 将这些序列化为一个结构。

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct PWHash {
pub pw_salt: String,
pub pw_cost: u32,
pub version: String,
}

我看过以前使用 Python 实现的客户端,其中 PBKDF2 函数似乎都接受字符串。但是,对于带有 Rust 的 PBKDF2,它们都接受 &[u8] 作为参数。

我在调用函数时使用了.as_bytes(),然后用str::from_utf8输出派生 key 。但是,这样做时,它会失败并显示 Err(Utf8Error { valid_up_to: 0, error_len: Some(1) })

这是一个代码片段:

pub fn hashcompute(&self, password: String) {
let mut dk = [0u8; 768]; // derived key
let mut mac = Hmac::new(Sha512::new(), password.as_bytes());
pbkdf2::pbkdf2(&mut mac, self.pw_salt.as_bytes(), self.pw_cost, &mut dk);

println!("{:?}", str::from_utf8(&dk));
}

即使 String::from_utf8_lossy 也会返回不可读字符的结果。

我如何正确地格式化 Rust 字符串以用于正确的加密用途?是否有另一个功能正常的库?或者这是一个失败的原因?

最佳答案

根据标准文件documentation , key 应该是十六进制编码的(请参阅代码示例中的注释)。所以这样的事情应该有效:

extern crate rustc_serialize as serialize;
use serialize::hex::{FromHex, ToHex};

pub fn hashcompute(&self, password: String) {
let mut dk = [0u8; 768]; // derived key
let mut mac = Hmac::new(Sha512::new(), password.as_bytes());
pbkdf2::pbkdf2(&mut mac, self.pw_salt.from_hex().unwrap(), self.pw_cost, &mut dk);

println!("{}", dk.to_hex());
}

请注意,我还使用了 from_hex 将 salt 从字符串转换为 &[u8],因为看起来 salt 也应该是十六进制编码的.

关于cryptography - 使用 PBKDF2 key 推导正确创建用户可读的 salt with rust-crypto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101377/

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