• openssl 常用命令demo


    RSA Private Key的结构(ASN.1)


    RSAPrivateKey ::= SEQUENCE {
        version           Version,
        modulus           INTEGER,  -- n
        publicExponent    INTEGER,  -- e
        privateExponent   INTEGER,  -- d
        prime1            INTEGER,  -- p
        prime2            INTEGER,  -- q
        exponent1         INTEGER,  -- d mod (p-1)
        exponent2         INTEGER,  -- d mod (q-1)
        coefficient       INTEGER,  -- (inverse of q) mod p
        otherPrimeInfos   OtherPrimeInfos OPTIONAL
    }

    key生成

    生成私钥
    openssl genrsa -out rsa_private_key.pem 2048
    生成公钥
    openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    PEM格式是文本格式,是把key的内容base64编码而来,数据格式称为DER

    key查看

    查看私钥内容
    openssl pkey -in privkey.pem -text -noout
    得到的结果会是如上private key结构的数据。包含modulus,publicExponent,privateExponent,prime1,prime2,exponent1,exponent2,coefficient,等等信息。

    查看公钥内容
    openssl pkey -pubin -in pubkey.pem -text -noout
    包含modulus和publicExponent部分。


    查看key信息:openssl rsa -noout -text -in myserver.key
    查看csr信息:openssl req -noout -text -in myserver.csr
    查看证书信息:openssl x509 -noout -text -in ca.crt

    查看证书:
    openssl x509 -in cert.pem -text -noout
    openssl x509 -in cert.cer -text -noout
    openssl x509 -in cert.crt -text -noout
    openssl x509 -in certificate.der -inform der -text -noout

    key格式转换
    PEM转DER格式

    # 私钥: PEM --(convert)--> DER
    $ openssl rsa -inform PEM -in privkey.pem -outform DER -out privkey.der
      
    # 公钥: PEM --(convert)--> DER
    $ openssl rsa -inform PEM -in pubkey.pem -pubin -outform DER -out pubkey.der


    DER转PEM格式

    # 私钥: DER --(convert) --> PEM
    $ openssl rsa -inform DER -in privkey.der -outform PEM -out privkey.PEM
      
    # 公钥: DER --(convert) --> PEM
    $ openssl rsa -inform DER -in pubkey.der -pubin -outform PEM -out pubkey.PEM

    MTK 平台PEM,DER相互转换工具

    python pem_to_der.py pubkey.pem pubkey.der 
    # der_to_pem.py

    key数据转换

    DER转为数组data:
    xxd -i pubk.der

    the same result:
    openssl rsa -in erase_pri.pem -pubout > test_pub.pem
    openssl rsa -inform PEM -in test_pub.pem -pubin -outform DER -out test_pub.der
    <==>
    openssl rsa -in erase_pri.pem -pubout -outform DER >test_pub2.der

    MTK 平台 DER转为数组的.h文件工具
    ./der_extractor pubkey.der pubkey.h ANDROID_SBC
     
    [Usage] ./der_extractor pubk.der CHIP_KEY.ini SV5_SBC
    [Usage] ./der_extractor priv.der CHIP_KEY.ini SV5_SIGN
    [Usage] ./der_extractor pubk.der oemkey.h ANDROID_SBC
    [Usage] ./der_extractor priv.der SIGNTOOL_2048_PRVK.h ANDROID_SIGN

    签名、验签:

    用私钥给文件签名
    echo "hello there" > test.txt

    openssl pkeyutl -sign -in test.txt -inkey key.pem -out test.sig
    用公钥验证签名
    openssl pkeyutl -verify -in test.txt -sigfile test.sig -pubin -inkey pubkey.pem
    用公钥恢复签名文件的内容
    openssl pkeyutl -verifyrecover -in test.sig -pubin -inkey pubkey.pem
    公钥加密文件
    openssl pkeyutl -encrypt -in test.txt -pubin -inkey pubkey.pem -out test.enc
    用私钥解密文件
    openssl pkeyutl -decrypt -in test.enc -inkey key.pem -out test.dec
    MTK代码中的相关工具
    ../vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/


    openssl kdf 校验key实例:

    C:\Users>openssl version
    OpenSSL 3.3.0 9 Apr 2024 (Library: OpenSSL 3.3.0 9 Apr 2024)

    C:\Users>openssl kdf -keylen 32 -kdfopt digest:SHA256 -kdfopt pass:3199265327188065 -kdfopt hexsalt:0FDBC6E7530A320B98ABE5ADA8879CE4 -kdfopt iter:30000 PBKDF2
    29:6C:80:F9:CC:E5:BE:2F:E6:44:F4:6A:E3:68:DF:38:4C:4E:B3:3A:10:73:FE:05:43:B9:E5:D9:CB:04:F8:D4

    对应原始数据:
    IMEI        ITERATION    SIMLOCK1_SALT            SIMLOCK1_HCK                                SIMLOCK_CONTROL_KEY
    xxxxxxxxxxxxxxxx    30000    0FDBC6E7530A320B98ABE5ADA8879CE4    296C80F9CCE5BE2FE644F46AE368DF384C4EB33A1073FE0543B9E5D9CB04F8D4    3199265327188065

    补充:
    PEM 与 DER 格式

    PEM 与 DER是用于存储、传输密钥和证书的标准格式,两者紧密关联,可以互相转换
    DER:Distinguished Encoding Rules,可分辩编码规则。DER格式文件后缀通常为 “.der” 和 “.cer”,后缀名并不会影响 DER 格式文件的解析。
    PEM:Privacy-Enhanced Mail,隐私增强邮件。PEM格式文件后缀通常为".pem"、“.cer”、“.crt”、“.key”,后缀名并不会影响 PEM 格式文件的解析。

    1. PEM 与 DER 关系:
    ASN.1 ------(序列化)------ DER ------(Base64编码)------ PEM
    对 ASN.1 序列化后,就会生成一个二进制串,这个就是 DER 格式,将二进制进行 Base64 编码,再加上 PEM 格式特有的头尾两行,就生成了 PEM 格式,如RSA私钥的PEM格式如下:
    -----BEGIN RSA PRIVATE KEY-----
    base64_decode(DER二进制)
    -----END RSA PRIVATE KEY-----

    2. PEM 与 DER 互相转换
    2.1 PEM 转 DER格式
    先将 PEM 文件里面首尾的 “----BEGIN xxx----” 和 “----END xxx----” 两行去掉,再将内容合并为一行(去掉换行符),最后将内容进行 Base64 解码,最后结果就是 DER 格式。

    openssl 命令:
    openssl rsa -in rsa_private.pem -outform DER -out rsa_private.der

    2.2 DER 转 PEM 格式
    先将 DER 二进制内容进行 Base64 编码,再按每行 64 个字节进行切分,最后在切分后的内容前后加上 “----BEGIN xxx----” 和 “----END xxx----”。

    openssl 命令:
    openssl rsa -inform DER -in rsa_private.der -outform PEM -out rsa_private2.pem

    3. DER 和 PEM 文件内容解析
    上面提到过,DER 是对 ASN.1 结构对象序列化的结果,将DER的内容解析出来就是 ASN.1 结构。

    openssl rsa -inform pem -in rsa_private.pem -text -noout
    openssl rsa -inform der -in rsa_private.der -text -noout

    截图实例:

  • 相关阅读:
    用一张图说一说 ChatGPT 内部技术工作流程
    七大顶尖 C++ 开源构建系统
    设计模式与前端工程师
    C++数据结构X篇_01_数据结构的基本概念
    微信小程序能给花店带来哪些作用_分享花店微信小程序开发优势
    SaulLM-7B: A pioneering Large Language Model for Law
    7-zip压缩包密码忘记了,怎么破解?
    大转盘流程
    手游上线必须做的事情
    java简单实现AIDL进程通信
  • 原文地址:https://blog.csdn.net/jimbo_lee/article/details/139366874