Algorithm RSA公钥从JWK到PEM转换的高级算法

Algorithm RSA公钥从JWK到PEM转换的高级算法,algorithm,nginx,encryption,lua,rsa,Algorithm,Nginx,Encryption,Lua,Rsa,我正在用LUA编写一个nginx模块,我发现关于某个特定主题的文档非常稀少。我需要将以JWK格式存储的RSA公钥转换为PEM。我几乎需要在LUA代码中手动完成这项工作(出于许多原因)。这意味着没有ASN.1库 我甚至很难找到转换它们的算法的高级/伪代码示例。我了解基本知识(JWK是base64url编码的模和指数,PEM是相同的值DER编码并放入ASN.1序列,然后是base64编码的w/----开始公钥----前缀/etc)。但是,我在实际实现它时遇到了困难,因为ASN.1文档是。。。浓密的

我正在用LUA编写一个nginx模块,我发现关于某个特定主题的文档非常稀少。我需要将以JWK格式存储的RSA公钥转换为PEM。我几乎需要在LUA代码中手动完成这项工作(出于许多原因)。这意味着没有ASN.1库

我甚至很难找到转换它们的算法的高级/伪代码示例。我了解基本知识(JWK是base64url编码的模和指数,PEM是相同的值DER编码并放入ASN.1序列,然后是base64编码的w/----开始公钥----前缀/etc)。但是,我在实际实现它时遇到了困难,因为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"
    }

可能是重复的,我已经在那里看到了PHP示例;问题是它使用了一个预烘焙的ASN库,所以它并不是一个关于如何用另一种语言手动生成相同的库的很好的概述:\n我不知道ASN.1解析的现有Lua实现。你的选择可能是1)找到一个可以移植的不同语言的现有实现,2)使用可以依赖的C语言的现有实现,或者3)根据规范编写自己的实现。我知道没有一个是理想的。我会选择1,使用一种你知道的不同语言的实现-,等等。因为问题太广泛了。DER编码的大多数方面都很简单,DER编码的X.509证书的示例随处可见。如果你有什么特别的问题,那就把你的问题缩小到这个范围,但要换个方向。