You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本从OpenSSL输出中提取RSA私指数

提取RSA私钥的私指数解决方案

方法一:通过awk匹配多行区块提取

直接处理openssl rsa -text的输出,用awk定位privateExponent的内容区块,再按需整理格式:

# 提取连续无空格的私指数字符串
openssl rsa -in key_rsa_private_1024.pem -noout -text | awk '/privateExponent/ {flag=1; next} /^    [A-Z]/ {flag=0} flag {print}' | tr -d ' \n'

如果需要保留原始多行带空格的格式,去掉最后的tr命令即可:

openssl rsa -in key_rsa_private_1024.pem -noout -text | awk '/privateExponent/ {flag=1; next} /^    [A-Z]/ {flag=0} flag'

逻辑说明

  • /privateExponent/ {flag=1; next}:匹配到privateExponent字段名行时,开启抓取标记并跳过当前行(该行无指数内容)
  • /^ [A-Z]/ {flag=0}:匹配到下一个以4个空格+大写字母开头的字段行时(比如publicExponent、modulus),关闭标记
  • flag {print}:标记开启时打印所有行,即私指数的内容行

方法二:通过ASN.1解析精准提取

利用openssl asn1parse解析私钥的ASN.1结构,直接定位私指数数据:

openssl asn1parse -in key_rsa_private_1024.pem -i | grep -A 3 'privateExponent' | awk '/:/ {print $4}' | tr -d '\n'

逻辑说明

  • openssl asn1parse -i:以缩进格式输出私钥的ASN.1结构字段
  • grep -A 3 'privateExponent':抓取privateExponent字段及后续3行数据(指数可能分布在多行)
  • awk '/:/ {print $4}':提取每行的十六进制数据部分
  • tr -d '\n':将多行数据拼接为连续字符串

为什么你之前的方法失效

privateExponent的内容是多行分布的,普通grep privateExponent只能匹配字段名行,无法抓取后续的多行数据;简单的awk单行处理也无法识别完整的内容区块,因此需要通过标记(flag)界定区块的开始和结束。

内容的提问来源于stack exchange,提问作者basangouda46

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:50:06