基于 openssl 的密码管理脚本
发布时间:2020-12-15 07:13:57 所属栏目:安全 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/bin/bashinput_name(){if [ "$#" = "1" ]; thenname="$1"return 0fiprintf "请输入名称:"read -r nameif [ -z "$name" ]; thenecho "名称不能为空
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/bin/bash input_name() { if [ "$#" = "1" ]; then name="$1" return 0 fi printf "请输入名称:" read -r name if [ -z "$name" ]; then echo "名称不能为空!" return 1 fi printf "%s" "$name" | grep '[[:punct:]]' >/dev/null 2>&1 if [ "$?" -ne "1" ]; then echo "名称不能包含标点符号!" return 1 fi return 0 } get_name() { if [ "$#" = "0" ]; then OLD_IFS="$IFS" IFS=' ' select opt in `list` do if [ -n "$opt" ]; then name="$opt" IFS="$OLD_IFS" return 0 else echo "操作取消" IFS="$OLD_IFS" return 1 fi done IFS="$OLD_IFS" else name="$1" return 0 fi return 1 } create() { input_name "[email?protected]" || return 1 show "$name" > /dev/null if [ "$?" = "0" ]; then echo "密码项 $name 已经存在!" return 1 fi printf "%s 的值:" "$name" read -r -s value content=`printf "%sn%s" "$name: $value" "$content"` echo } delete() { get_name "[email?protected]" || return 1 # 删除空行 name=`printf "%s" "$name" | sed '/^$/d'` content=`printf "%s" "$content" | sed -e "/^$name:/d"` } update() { get_name "[email?protected]" || return 1 delete "$name" create "$name" } show() { get_name "[email?protected]" || return 1 printf "%s" "$content" | grep "^$name:" } list() { printf "%s" "$content" | sed -e "s/:.*$//g" } save() { printf "%s" "$content" | openssl aes-256-cbc -salt -pass env:wallet_token -out "$wallet_file" } change_password() { printf "请输入当前的密码:" read -r -s token if [ "$token" != "$wallet_token" ]; then printf "n密码错误!n" return 1 fi printf "n请输入新密码:" read -r -s new_token printf "n请确认新密码:" read -r -s token if [ "$token" != "$new_token" ]; then printf "n两次输入的密码不一致!n" return 1 fi wallet_token="$new_token" printf "n修改密码成功!n" return 0 } usage() { echo '基于 openssl 的密码管理脚本(bash)' echo '命令: new,rm,update,show,passwd,quit' } if [ "$#" -gt "1" ]; then echo "格式:$0 [<钱包文件路径>]" echo exit 1 elif [ "$#" -eq "1" ]; then wallet_file="$1" else wallet_file="$HOME/.wallet-default" fi if [ -f "$wallet_file" ]; then printf "请输入钱包密码:" read -r -s wallet_token export wallet_token content=`openssl aes-256-cbc -d -salt -pass env:wallet_token -in "$wallet_file"` if [ "$?" != "0" ]; then echo '解密失败!' exit 1 fi else printf "钱包不存在,需要创建一个钱包n" printf "请输入钱包的密码:" read -r -s wallet_token echo export wallet_token if [ -z "$wallet_token" ]; then echo "密码不能为空" exit 1 fi printf "再次输入以确认密码:" read -r -s token echo if [ "$wallet_token" != "$token" ]; then echo "两次输入的密码不一致!" exit 1 fi content="" unset token fi trap "" INT echo usage while true do printf "nwallet> " read cmd case "$cmd" in "new" ) create ;; "rm" ) delete ;; "update" ) update ;; "show" ) show ;; "passwd" ) change_password ;; "" ) clear; usage ;; "quit" ) echo; save content=""; export wallet_token=""; exit 0 ;; * ) printf "无效命令:%sn" "$cmd"; usage ;; esac done 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容