Rust:如何散列字符串?

标签 rust hash cryptography

我正在尝试在 Rust 中创建一个控制台应用程序,您必须在其中输入密码才能访问文件的其余部分,因此我想确保您不能只通过读取文件来查找密码,所以我想将密码存储为哈希,因此它(不太可能)是不可逆的。

我在 Rust 中查找了散列,但它们似乎只能用于结构,而我正在尝试插入一个字符串。结构是能够做到这一点的唯一方法吗?

最佳答案

Rust 中内置的 Hash 类旨在处理数据以进入 HashMap 或 HashSet。这不适用于密码验证。

如果你想执行密码验证,你应该使用像 Argon2id 或 scrypt 这样的密码哈希。您可以在 argon2scrypt crate 中找到它们。密码哈希总是占用字节,因此您将希望以 &[u8] 的形式访问您的字符串。 password_hash crate 提供了一些特性,您可以使用这些特性将它们转换为序列化密码。

如果您的目标是使用密码加密文件的其余部分,那么您应该使用与 NaCl 的绑定(bind)之一。该库具有旨在确保安全的原语。您将使用带有随机盐的密码哈希功能来生成 key ,然后将其用作带有随机随机数的 secret 框的 key 输入。还有其他方法可以做到这一点,但除非您精通密码学,否则使用 NaCl 是一个明智的选择,因为它更难被滥用。

关于Rust:如何散列字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70319632/

相关文章:

vector - 从旧 Vector 创建新 Vector?

c - 段。哈希表 ADT 中的错误 - C

php - AES 128 加密赋予特殊字符

java - 了解 Miller Rabin 实现

c++ - 什么是 unicode/unistr.h?

rust - 如何避免借用在不使用克隆的情况下移入闭包的值?

error-handling - 为什么 Arc::try_unwrap() 会引起 panic ?

generics - 使用 AsRef 返回包含在输入包装器类型中的引用

c++ - 如何找到不同的子串?

arrays - 在函数定义和变量赋值中使用 "hash"