当前位置: 首页 > news >正文

使用Bash脚本RSA公钥加密算法对密码进行加密解密方法

简介

       在Shell脚本中实现RSA加密解密功能,可以使用多种工具,例如opensslopenssl是一个强大的命令行工具,用于执行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、典型应用场景:
     自动化脚本中的数据库密码保护;
     配置文件敏感信息加密;
     需要安全存储密码的场景;
注意:实际使用时建议结合具体安全需求,可考虑增加密码复杂度检查、密钥轮换机制等增强措施。

如果小伙伴喜欢这篇文章的话,希望给点赞收藏加关注哦!!! 感谢大家的支持!!😊🙏

相关文章:

  • 厦门php网站建设宁波seo排名优化
  • 如何将自己做的网站天津百度网站快速优化
  • ps做网站首页效果特效百度推广怎么收费的
  • 网站开发浏览器兼容性seo推广的特点
  • 找设计案例的网站北京网站优化公司
  • 淘宝首页网站怎么做网络运营培训哪里有学校
  • vscode中vue自定义组件的标签失去特殊颜色高亮
  • 清华大学联合IDEA推出GUAVA:单幅图像生成实时可动画3D上半身,渲染速度突破0.1秒,可实现实时表情与动作同步。
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的超市库存商品管理系统,推荐!
  • 基于Qt和GDAL的多线程影像重采样工具
  • QT 学习笔记摘要(一)
  • 电动汽车定速巡航模式控制设计方法
  • Flask(六) 数据库操作SQLAlchemy
  • 【LUT技术专题】1D和3DLUT的高效组合-SepLUT
  • Java 线程池技术深度解析与代码实战
  • Petrel导入well数据
  • Nginx性能优化配置指南
  • 【C/C++】C++ 编程规范:101条规则准则与最佳实践
  • [ruby on rails] ActiveJob中 discard_on,retry_on和 rescue_from的应用
  • Python Polars库详解:高性能数据处理的新标杆
  • 使用markRaw实例化echarts对象
  • Python中class对象/属性/方法/封装/继承/多态/魔法方法详解
  • Python案例练习:字典专题(分析文章的文字与次数、设计星座字典、凯撒密码、摩尔斯密码)
  • 利用folium实现全国高校分布地图显示
  • 验证 TCP 连接在异常情况下的断开机制之进程(客户端)被 kill 掉
  • 如何将适用于 Docker 的 ONLYOFFICE 文档更新到 v9.0