美文网首页
shell 脚本明文密码加密小工具

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

作者: 木头_95b3 | 来源:发表于2020-05-24 21:54 被阅读0次
    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 ~]# 
    

    相关文章

      网友评论

          本文标题:shell 脚本明文密码加密小工具

          本文链接:https://www.haomeiwen.com/subject/sdtjahtx.html