首页 > 其他 > 详细

mykeepass for command line

时间:2014-11-07 02:05:05      阅读:234      评论:0      收藏:0      [点我收藏+]

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

原文:http://www.blogjava.net/stone2083/archive/2014/11/06/419598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!