shell 脚本明文密码加密小工具

2020-05-24  本文已影响0人  木头_95b3
password_encryption.sh 脚本 ,
  • 是一个使用shell 命令写的脚本;是对明文密码加密的小工具;基于aes-256进行封装的 ;解决密码繁多的困扰,使用该脚本,只需记住一个密码,其余密码进行加密存储,记不住时,可再用该工具解密;
  • 需要 openssl 依赖服务,一般linux 上都可有该服务
  • Centos6、7、 Ubuntu 20.04 LTS 上测试正常使用
[root@centos-mini ~]# vim password_encryption.sh 
#!/bin/bash
#
#
# Author: Hao Chuanfeng
# Date of production:2019-7-17
# Update: 2020-5-24
# Description: For password encryption, you don't need to remember many passwords, just one password
# 描述:用于密码加密,便于存放,但不会被人盗取

#颜色
HASTTY=1
red_echo ()      { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[031;1m$@\033[0m"; }
green_echo ()    { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[032;1m$@\033[0m"; }
yellow_echo ()   { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[033;1m$@\033[0m"; }
blue_echo ()     { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[034;1m$@\033[0m"; }
purple_echo ()   { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[035;1m$@\033[0m"; }
bred_echo ()     { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[041;1m$@\033[0m"; }
bgreen_echo ()   { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[042;1m$@\033[0m"; }
byellow_echo ()  { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[043;1m$@\033[0m"; }
bblue_echo ()    { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[044;1m$@\033[0m"; }
bpurple_echo ()  { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[045;1m$@\033[0m"; }
bgreen_echo ()   { [ "$HASTTY" != "1" ] && echo "$@" || echo -e "\033[042;34;1m$@\033[0m"; }

#用法
Usage () {
        red_echo "ERROR"
        echo -e "Usage:  $0 { -e 明文密码| -d  加密密码 }"
        echo -e "*********************** selection ***********************"
        echo -e "参数选项:"
        blue_echo  "\t-e ecrypt 对明文密码加密(不能与 -d 连用)"
        blue_echo  "\t-d decrypt 对加密密码还原为明文(不能与 -e 连用)\n"
        }

#传参
Parameter () {
        while getopts ":e:d:h" opt
        do
            case $opt in
                e)
                EPASSWD=$OPTARG
                #echo "参数e的值$OPTARG"
                ;;
                d)
                DPASSWD=$OPTARG
                #echo "参数d的值$OPTARG"
                ;;
                h)
                Usage
                exit 1
                ;;
                *)
                Usage
                exit 2
            esac
        done
        [ "$EPASSWD" == "" -a "$DPASSWD" == "" ] && Usage && exit 3
        [ "$EPASSWD" != "" -a "$DPASSWD" != "" ]  && Usage && exit 4
        [ $# -eq 0 ] && Usage
        }

#密码(salt值)
Password () {
        #echo -e "请输入密码: \c"
        salt=''
        while : ;
        do
            read -n 1 -s -p "" pw
            if [ $pw ]; then
                        salt=${salt}$pw
                # 如果不需要显示 * ,把这条命令删掉即可
                echo -e "*\c" 
            else
                echo
                break
            fi
        done
        }

#密码加密
mi_ma_jia_mi () {
        for n in 1 2;do
        [ $n -eq 1 ] && echo -e "请输入加密密码: \c"
        [ $n -eq 2 ] && echo -e "请再次输入加密密码: \c"
          Password
          export salt_$n="$salt"
        done
        # 两次输入的判断密码一致性
        [ "${salt_1}" != "${salt_2}" ] &&  red_echo "两次输入的密码不一致" && exit 3
        # 密码的位数不能小于8     
        length=`expr length "$salt"`
        (( $length < 8 )) && red_echo "密码不能小于8位数" && exit 1
        # 密码中必须存在数字、字母
        salt_check=$(echo $salt|sed s'/./& /g')
        for n in $salt_check;do
                for m in {a..z} {A..Z};do
                        [ "$n" == "$m" ] &&  word=$n
                done
                for m in {1..9};do
                        [ "$n" == "$m" ] && num=$n
                done
        done
        [ "$word" == "" ] && echo 密码中必须存在数字、字母 && exit 4
        [ "$num" == "" ] && echo 密码中必须存在数字、字母  && exit 5
        PASSWD=`echo "$1" | openssl enc -aes-256-cbc -a -salt -pass pass:$salt` &&  green_echo "加密后的密码:$PASSWD"
        }

# 密码解密
mi_ma_jie_mi () {
        echo -e "请输入解密密码: \c"
        Password
        a=`echo $1|openssl enc -aes-256-cbc -a -d -salt -pass pass:$salt 2>/dev/null`
        [ "$a" == "" ] && red_echo "输入的密码不正确" || green_echo "明文密码:$a"
        }

# 调用函数
Parameter $@
[ "$EPASSWD" != "" ] && mi_ma_jia_mi $EPASSWD
[ "$DPASSWD" != "" ] && mi_ma_jie_mi $DPASSWD
  • password_encryption.sh 使用用法, 解密,加密 使用案例:
#使用方法
[root@centos-mini ~]# bash password_encryption.sh 
ERROR
Usage:  password_encryption.sh { -e 明文密码| -d  加密密码 }
*********************** selection ***********************
参数选项:
        -e ecrypt 对明文密码加密(不能与 -d 连用)
        -d decrypt 对加密密码还原为明文(不能与 -e 连用)

#加密密码
[root@centos-mini ~]# bash password_encryption.sh -e 123456
请输入加密密码: **********
请再次输入加密密码: **********
加密后的密码:U2FsdGVkX195bV5j35v87+HM+jkQhtDs48c65s+MIds=

#解密密码
[root@centos-mini ~]# bash password_encryption.sh -d U2FsdGVkX195bV5j35v87+HM+jkQhtDs48c65s+MIds=
请输入解密密码: **********
明文密码:123456
[root@centos-mini ~]# 
上一篇下一篇

猜你喜欢

热点阅读