将JWK格式的RSA公钥转换为PEM的高级算法

我正在使用LUA编写一个nginx模块,并且在一些特定的主题上找到了非常稀疏的文档。我需要将存储在JWK格式中的RSA公钥转换为PEM。我需要在LUA代码中几乎完全手动完成此操作(由于许多原因)。这意味着没有ASN.1库。

我遇到的问题是,即使是高级/伪代码示例的算法转换也很难找到。我了解基础知识(JWK是base64url编码的模数和指数,PEM是相同值DER编码并放入ASN.1序列中,然后用-----BEGIN PUBLIC KEY----前缀等进行base64编码)。但是,我仍然有困难实现它,因为ASN.1文档很冗长。

有人能够提供一种实际的位字符串打包的高级概述,以生成公钥的适当PEM表示,假设我已经解包/ base64url解码了数字并将它们存储在二进制字符串中。

我在此处附加了一个JWK格式的示例密钥以供参考:

    {
          "alg": "RS256",
          "e": "AQAB",
          "n": "iKqiD4cr7FZKm6f05K4r-GQOvjRqjOeFmOho9V7SAXYwCyJluaGBLVvDWO1XlduPLOrsG_Wgs67SOG5qeLPR8T1zDK4bfJAo1Tvbw
        YeTwVSfd_0mzRq8WaVc_2JtEK7J-4Z0MdVm_dJmcMHVfDziCRohSZthN__WM2NwGnbewWnla0wpEsU3QMZ05_OxvbBdQZaDUsNSx4
        6is29eCdYwhkAfFd_cFRq3DixLEYUsRwmOqwABwwDjBTNvgZOomrtD8BRFWSTlwsbrNZtJMYU33wuLO9ynFkZnY6qRKVHr3YToIrq
        NBXw0RWCheTouQ-snfAB6wcE2WDN3N5z760ejqQ",
      "kid": "U5R8cHbGw445Qbq8zVO1PcCpXL8yG6IcovVa3laCoxM",
      "kty": "RSA",
      "use": "sig"
    }
点赞