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

如何通过Makefile提取密钥modulus与exponent生成STM32固件所需宏定义

解决方案

你可以通过awk的状态匹配逻辑精准筛选openssl输出的modulus和exponent段落,直接生成符合要求的头文件,完整Makefile命令如下:

$(shell openssl rsa -inform DER -text -noout < privatekey.der | awk '
BEGIN {
    print "#ifndef _DER_KEY_H_"
    print "#define _DER_KEY_H_"
    print "/* Auto generated file. DO NOT MODIFY */"
    in_modulus = 0
    in_exponent = 0
    mod_str = "#define MODULUS { "
    exp_str = "#define EXPONENT { "
}
# 匹配模数段开始
/^Modulus:/ {
    in_modulus = 1
    next
}
# 匹配公钥指数段开始,同时结束模数段
/^publicExponent/ {
    in_modulus = 0
    in_exponent = 1
    # 提取括号内的16进制指数值
    match($0, /\(0x([0-9a-fA-F]+)\)/, arr)
    exp_str = exp_str "0x" arr[1]
    next
}
# 空行标记指数段结束
/^$/ && in_exponent {
    in_exponent = 0
}
# 处理模数段的16进制内容
in_modulus {
    # 清除行首空格、行尾冒号
    gsub(/^[[:space:]]+|:$/, "", $0)
    # 逐位拼接为C数组格式
    for(i=1; i<=NF; i++) {
        mod_str = mod_str "0x" $i ", "
    }
}
END {
    # 清除模数末尾多余的逗号
    sub(/, $/, "", mod_str)
    mod_str = mod_str " }"
    exp_str = exp_str " }"
    print mod_str
    print exp_str
    print "#endif /* _DER_KEY_H_ */"
}' > Core/Inc/der.h)

上述实现逻辑:

  • 用两个状态变量标记当前解析的段落,自动过滤openssl输出中不需要的私钥素数、其他指数等冗余内容
  • 模数段逐行解析16进制串,自动拼接为C数组要求的0xXX,格式
  • 指数直接从字段后的括号中提取16进制值,无需处理多余文本
  • 输出自动带C头文件防护宏,可直接引入固件工程使用

如果你需要提取私钥指数而非公钥指数,只需将上述awk脚本中匹配^publicExponent的规则修改为匹配^privateExponent:,对应调整段落切换逻辑即可。

内容的提问来源于stack exchange,提问作者Matheus Bueno Gomes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:30:02