mykeepass for command line

mykeepass for command line

命令行下的类似keepass一个东东.

如何使用
Command line  for Keep Password.
Usage:
  keepass.sh -l
  keepass.sh -e plain-text
  keepass.sh -d encoded-text
  keepass.sh -s encoded-text name

-l
展示保存下所有加密后的密码信息
-e
将明文密码, 加密, 密文自动保存到剪切板上
-d
将密文界面, 解密后的明文自动保存到剪切板上
-s
将密文持久化保存到文件中

代码实现
# !/bin/sh

DATA= " $HOME/.password/data "
declare -a passwords

function enc()
{
     # $1: plain text
    echo  " $1 " | openssl enc -des | base64
}

function dec()
{
     # $1: encoded text
    echo  " $1 " | base64 -D | openssl enc -des -d
}

function sync()
{
     for ((loop=0;loop<${ # passwords[*]};loop++))
    do
         if [ -z  " ${passwords[$loop]} " ];then
             continue
        fi
        value= " $value\n${passwords[$loop]} "
    done
    echo $value > $DATA
}

function save()
{
     # $1 encoded password
     # $2 name
     for ((loop=0; loop<${ # passwords[*]}; loop++))
    do
        info=${passwords[$loop]}
        password=$(echo $info | awk  ' {print $1} ')
        name=$(echo $info | awk  ' {print $2} ')
         if [  " $2 " ==  " $name " ];then
            passwords[$loop]= " $1 $2 "
             return
        fi
    done
    passwords[$loop]= " $1 $2 "

    sync
}

function delete()
{
     # $1: name
     for ((loop=0; loop<${ # passwords[*]}; loop++))
    do
        info=${passwords[$loop]}
        password=$(echo $info | awk  ' {print $1} ')
        name=$(echo $info | awk  ' {print $2} ')
         if [  " $1 " ==  " $name " ];then
            passwords[$loop]= ""
        fi
    done

    sync
}

function list()
{
     for ((loop=0;loop<${ # passwords[*]};loop++))
    do
        echo ${passwords[$loop]}
    done
}

function help()
{
    echo  " Command line for Keep Password.
Usage:
  keepass.sh -l
  keepass.sh -e plain-text
  keepass.sh -d encoded-text
  keepass.sh -s encoded-text name "
}

function init()
{
    loop=0
     while read line
    do
         if [ -z  " $line " ];then
             continue
        fi
        passwords[$loop]=$line
        loop=$(echo $loop+1 | bc)
    done < $DATA
}

init
case  " $1 "  in
    -l)
        list
        ;;
    -e)
        enc  " $2 " | tr -d  ' \n ' | pbcopy
        ;;
    -d)
        dec  " $2 " | tr -d  ' \n ' | pbcopy
        ;;
    -s)
        save  " $2 "  " $3 "
        ;;
    -r)
        delete  " $2 "
        ;;
    *)
        help
        ;;
esac

备注:
1. 纯shell打造
2. 目前支持Mac shell, 理论上支持linux系统(唯一的改动, 把pbcopy改成linux下剪切板复制的命令即可)


你可能感兴趣的:(mykeepass for command line)