如何解决如何正确安全地将标准输入传递给 sha256sum 函数?
我想制作一个简单的、确定性的、无记忆的密码生成器。我想我可以使用大多数系统上已经提供的简单、稳定的 shell 工具,例如 sha256sum。我会将网站名称附加到主密码以生成该网站的唯一密码,并且我将只有一个文档来跟踪不同网站(不幸地)采用的各种密码标准,以及我在任何给定网站上使用的密码。
我的第一次尝试是这样的:
>>> echo $(echo "<master-password><website-name><state>" | sha256sum | cut -c1-20)aA1_
917ef2ce102972f0c0edaA1_
#I append aA1_ just to meet website requirements of one lowercase,uppercase,number,and special character. It doesn't increase or decrease the security of the password.
但问题在于,现在可以在命令历史记录和 ps
中查看主密码。
所以我意识到我需要从 stdin
读取字符串,并将其通过管道传输到 sha256sum
。
但我尝试了诸如
read | sha256sum
无论我输入什么,都会产生相同的哈希值,所以它显然不起作用。
cat /dev/stdin | sha256sum
也不起作用,它只是一直从 stdin 读取数据,直到我退出。
这两个也会向终端回显密码,如果可能的话,我想禁用它。
我还查看了 this answer,但尽管此方法禁止在终端中回显密码:
- 由于某种原因,结果散列与第一种方法不同
- 它将密码存储在环境变量中,可以在发出命令 (
echo $password
) 后打印。我不知道这是否比直接传递给命令且从未存储在任何范围内的一次性字符串更安全或更安全。
unset -v password
set +o allexport
IFS= read -rs password < /dev/tty &&
printf "%s" "$password" | sha256sum
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。