使用Bash脚本RSA公钥加密算法对密码进行加密解密方法
简介
在Shell脚本中实现RSA加密解密功能,可以使用多种工具,例如openssl
。openssl
是一个强大的命令行工具,用于执行SSL和TLS协议中的各种任务,同时也支持非对称加密。
生成公钥
#!/bin/bash
# 生成密钥对(2048位)
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
加密脚本
#!/bin/bash
# 安全配置
PUBLIC_KEY_PATH="${BASH_SOURCE%/*}/public.pem"
OUTPUT_FILE="${BASH_SOURCE%/*}/encrypted_password.dat"
KEY_SIZE=2048 # RSA密钥长度validate_environment() {# 检查openssl是否可用if ! command -v openssl &>/dev/null; thenecho "错误: openssl工具未安装" >&2exit 127fi# 检查公钥文件[ ! -f "$PUBLIC_KEY_PATH" ] && {echo "错误: 公钥文件不存在: $PUBLIC_KEY_PATH" >&2echo "请先生成RSA密钥对:"echo " openssl genrsa -out private.pem $KEY_SIZE"echo " openssl rsa -in private.pem -pubout -out public.pem"exit 1}
}# 安全读取密码
read_password() {read -rsp "请输入要加密的密码: " PASSWORDecho >&2echo "$PASSWORD"
}main() {validate_environmentlocal passwordpassword=$(read_password)# 加密操作if echo "$password" | openssl rsautl -encrypt -oaep -pubin \-inkey "$PUBLIC_KEY_PATH" -out "$OUTPUT_FILE" 2>/dev/null; thenecho "密码加密成功!加密结果已保存到: $OUTPUT_FILE"echo "请妥善保管以下文件:"echo " 1. 加密文件: $OUTPUT_FILE"echo " 2. 私钥文件: ${PUBLIC_KEY_PATH%/*}/private.pem"elseecho "错误: 密码加密失败" >&2echo "可能原因:" >&2echo " 1. 公钥格式不正确" >&2echo " 2. 密码长度超过RSA密钥限制" >&2exit 1fi
}main "$@"
解密脚本
#!/bin/bash
# 安全配置
PRIVATE_KEY_PATH="./private.pem"
ENCRYPTED_PASS_FILE="./encrypted_password.dat"
LOG_FILE="./log.log"
# 增强型解密函数
# 使用openssl解密密码
decrypt_to_string() {[ ! -r "$PRIVATE_KEY_PATH" ] && {echo "错误: 私钥文件不可读: $PRIVATE_KEY_PATH" >> "$LOG_FILE"return 127}local decrypted_passif ! decrypted_pass=$(openssl rsautl -decrypt -oaep -inkey "$PRIVATE_KEY_PATH" -in "$ENCRYPTED_PASS_FILE" 2>&1); thenecho "[$(date '+%Y-%m-%d %H:%M:%S')] 解密失败: $decrypted_pass" >> "$LOG_FILE"return 1fiecho "$decrypted_pass"
}PGPASSWORD=$(decrypt_to_string)
echo "输出密码:$PGPASSWORD"
echo "$(date) $current_date proc end" >> "$LOG_FILE"
最后解析出正确的密文
总结
1、加密流程:
使用RSA-OAEP填充模式加密;
输入:明文密码 + RSA公钥(public.pem);
输出:加密后的二进制文件(encrypted_password.dat);
关键命令:openssl rsautl -encrypt -oaep -pubin -inkey public.pem;
2、解密流程:
使用对应私钥解密;
输入:加密文件 + RSA私钥(private.pem);
输出:原始明文密码;
关键命令:openssl rsautl -decrypt -oaep -inkey private.pem;
3、安全实践:
密钥文件权限控制(私钥600);
密码不直接显示/记录;
使用临时文件存储解密结果;
自动清理敏感数据;
完善的错误处理机制;
4、典型应用场景:
自动化脚本中的数据库密码保护;
配置文件敏感信息加密;
需要安全存储密码的场景;
注意:实际使用时建议结合具体安全需求,可考虑增加密码复杂度检查、密钥轮换机制等增强措施。
如果小伙伴喜欢这篇文章的话,希望给点赞收藏加关注哦!!! 感谢大家的支持!!😊🙏