【奇葩】仅用 .bashrc 即可实现的密码管理器
大家好,我是无能君。
我将介绍一个令人不适的密码管理器。
.bashrc
我在我的.bashrc中写入了以下内容。
顺便说一下,由于它是用base91编码的,因此必须安装base91。
pp2091g() {
local dir="$HOME/.$FUNCNAME"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $FUNCNAME <string> <filename>"
return 1
fi
if [[ ! -d $dir ]]; then
mkdir -p $dir
fi
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base91 | cut -c -20 | tr -d "\n" ; echo
return 0
fi
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p > $dir/$2
echo "Generated and saved to $dir/$2"
}
简而言之,关于生成部分,请参考以下内容:
我想要一个base91安全的密码。 - SOULMINIGRIG
这真是一个非常简易的密码管理器。
但是,如果有很多SSH目标,像这样简单地包含符号字符会很困难,所以我才这样做。
您是否曾遇到过这样的情况:网站上使用的密码,短字符串能记住,但长字符串就记不住了?
因此,如果使用这个,可以用短字符串生成相对强大的密码,并且由于它编码的是从十六进制完全二进制化的文件,密码本身也不会以明文形式保存。
效果如下
效果如下所示。
$ pp2091g string file
Generated and saved to /home/haturatu/.pp2091g/file
$ pp2091g string file
_+f2t2X9JyLf?S(GplK~
当符号字符不受支持时
如果base91编码不支持符号字符,则使用经过base64编码的长字符串。
在日本网站中,许多网站无法支持所有符号字符,因此这是必要的。
pp6464g() {
local dir="$HOME/.$FUNCNAME"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $FUNCNAME <string> <filename>"
return 1
fi
if [[ ! -d $dir ]]; then
mkdir -p $dir
fi
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base64 | tr -d "\n" ; echo
return 0
fi
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p > $dir/$2
echo "Generated and saved to $dir/$2"
}
缺点
一旦文件被保存,任何strings命令都可以显示它。
$ pp2091g string file
_+f2t2X9JyLf?S(GplK~
$ pp2091g stringa file
_+f2t2X9JyLf?S(GplK~
因为
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base64 | tr -d "\n" ; echo
return 0
fi
因为它只是简单地cat出二进制文件并直接进行编码。
此外,如果strings相同,则会生成相同的密码。
优点
易于管理。由于它是基于文件的,如果需要,可以直接在其他服务器上使用。
也易于生成。即使文件丢失,只要记住文件名和strings,就可以直接恢复。
这个密码管理器的目的仅仅是尽可能不依赖外部,只记住短密码但又希望相对安全。
它可能对暴力破解很强,但如果shell被攻破,就会很危险。然而,如果只获取到密码,而不知道基本的电子邮件地址/电话号码以及在哪里使用,意义也不大。
此外,由于它是一个简单的shell脚本,因此易于定制。可以使用sha256sum而不是sha384sum,也可以选择自己喜欢的字符编码和字符串长度。
那么,下次再见。请多关照。