【令人不舒服的】僅用 .bashrc 就能實現的密碼管理器

3 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,我是無能。
我將介紹一個令人不舒服的密碼管理器。

.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,字符編碼和字符串長度也可以根據自己的喜好進行調整。

那麼下次再見。請多關照。

Related Posts