如何在Rust中对字符串进行哈希?

3

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

我查阅了 Rust 中的哈希函数,但它们似乎只能与结构体一起使用,而我正在尝试插入一个字符串。是否结构体是唯一的方法可以实现这个目的?


1
https://docs.rs/password-hash/0.1.1/password_hash/ - President James K. Polk
@PresidentJamesK.Polk 您链接的是旧版本的货物,而且这个货物的文档很混乱,只列出了很少或没有解释的函数。 - Maria
@Stargateur 我的意思是,有人不太可能能够在文件中反向解密密码,就像哈希一样。 - Maria
但是他们可以在不使用你的程序的情况下打开文件,对吧?或者如果你没有使用内存硬哈希,他们可以使用密码数据库或彩虹表。 - Thomas M. DuBuisson
1
听起来你正在使用错误的工具。什么会阻止用户在另一个不检查哈希值的程序中打开文件并访问所有内容呢?看起来你需要加密,而不是密码验证。 - mcarton
显示剩余3条评论
1个回答

2
在Rust中,内置的 Hash 类设计用于处理数据以便输入 HashMap 或 HashSet。但这并不适合进行密码验证。
如果您想进行密码验证,应使用像 Argon2id 或 scrypt 这样的密码哈希。您可以在 argon2 和 scrypt 包中找到它们。密码哈希始终采用字节方式,因此您需要将字符串作为 &[u8] 访问。password_hash 包提供了可用于将它们转换为序列化密码的 trait。
如果您的目标是使用密码加密文件的其余部分,则应使用 NaCl 的绑定之一。该库具有旨在安全的基元。您将使用随机盐的密码哈希功能生成一个密钥,然后将其用作带有随机 nonce 的 secret box 的输入密钥。还有其他方法可以做到这一点,但除非您精通密码学,否则使用 NaCl 是一个明智的选择,因为它更难被滥用。

很抱歉,我现在无法完成这个任务,因为这里已经是凌晨3点了。明天我会再来查看并且如果可以的话会批准它 :) - Maria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接