在配置文件中加密/解密存储的密码

5

我有一个简单的Bash脚本,用于自动化需要基于密码的身份验证的任务。目前我将凭据以明文形式存储:

$ cat ~/.myconfig
username=foo
password=bar

显然,这是不好的 - 所以我想知道是否有一种简单的方法可以使用我的公钥/私钥对加密/解密密码。使用另一个密码进行加密不会获得太多好处,因此我希望这个过程几乎自动化。

我已经做了一些研究(在这里和其他地方),但在这个问题上已经超出了我的能力范围...

3个回答

4

您可以将密码存储为MD5哈希值,并在之前添加一些盐。

创建:

\#!/bin/bash

salt=12345_

protocol=sha1sum

read -p "Enter login: " username
read -p -s "Password: " pass1
read -p -s "Repeat: pass2

if [ "pass1 != pass2" ]; then echo "Pass missmatch"; exit 1; else password=pass1; fi

echo -en "$username " >> ./mypasswd
echo -e "${salt}${password} | $protocol | awk '{print $1}'" >> ./mypqsswd

read:

\#!/bin/bash
salt=12345_ #(samesalt)
protocol=sha1sum

read -p "Enter username: " username
read -p -s "Enter password: " password

if [ `grep $username ./mypasswd | awk '{print $2}' != `echo -e "`echo ${salt}${password} | $protocol | awk '{print $2}'`" ]; then echo -e "wrong username or password"; exit 127; else echo -e "login successfull"; fi

这是你的代码。

MD5是不安全的。请使用SHA代替。(根据您想要的哈希长度,可以使用sha1sumsha256sumsha512sum等等。) - Adam Liss
最好将其保存为纯文本,我只是展示它的工作原理。我只添加了协议变量,所以只需更改它,您就可以获得sha256 sha512等。 - Sky
为什么这个回答被接受了?原帖中提到需要一种加密和解密密码的方法。据我所知,SHA之所以安全是因为无法被解密。 - Matthemattics

4
自动化你的任务意味着提供密码;无论你是否加密/混淆密码,都需要提供解密密码。
唯一避免这个困境的方法是使用类似代理程序的程序,例如ssh-agent,它可以为您存储密码。

ssh-agent听起来像是我正在寻找的东西 - 但是,我无法确定我应该如何使用它。 a)假设我从文件中加载了加密密码,那么我该如何解密它? b)我用什么来首先加密密码?(我预计这将是一个单独的手动步骤。) - AnC
ssh-agent被用作一个实现的例子。然而,这是针对ssh相关连接的特定解决方案。对于您的具体情况,类似的东西可以被创建,但如何创建取决于您的应用程序。 - pavel
1
我想到了一个钥匙环/钥匙链管理器来确定和访问相应的密钥对,但可能没有可移植的解决方案。(我的应用程序只是一个Bash脚本,用curl分派一些命令-类似于HTTP基本身份验证。) - AnC
1
你们的自动化流程有什么解决方案吗?我遇到了同样的情况。 - Jugi

2

如果你只是想隐藏密码,那么可以存储它的SHA1哈希值。然后将输入的密码的哈希值与存储的哈希值进行比较。


1
并且更改文件权限 chmod go-rw myconfig 以防止字典攻击。 - Eike
“Automated” 意味着没有输入密码。没有人来输入它。 - President James K. Polk
GregS是正确的 - 如果我通过要求用户输入另一个密码来自动输入实际密码,那么存储实际密码的意义就不大了。 - AnC

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