来自指数和模数字符串的 Ruby RSA

标签 ruby rsa

我有一个 RSA 公钥模数和指数字符串。

我想从这两个字符串创建一个 OpenSSL::PKey::RSA

基本上它们是:

  • n = '长字符串'
  • e = '4-character string'

我如何在 Ruby 中执行此操作? 最终目标是将其发送到 JWT gem 。

更新

我目前使用的是 Ruby 2.3.1,所以这行得通:

key = OpenSSL::PKey::RSA.new
key.e = OpenSSL::BN.new(Base64.decode64(e), 2)
key.n = OpenSSL::BN.new(Base64.decode64(n), 2)

但是,它在升级期间不起作用。

最佳答案

我是这样工作的,基于这个 python 实现:

https://github.com/jpf/okta-jwks-to-pem/blob/master/jwks_to_pem.py

    key = OpenSSL::PKey::RSA.new
    exponent = kid_header['e']
    modulus = kid_header['n']


    # Voila !
    key.set_key(base64_to_long(modulus), base64_to_long(exponent), nil)

    def base64_to_long(data)
      decoded_with_padding = Base64.urlsafe_decode64(data) + Base64.decode64('==')
      decoded_with_padding.to_s.unpack('C*').map do |byte|
        to_hex(byte)
      end.join.to_i(16)
    end

    def to_hex(int)
      int < 16 ? '0' + int.to_s(16) : int.to_s(16)
    end

关于来自指数和模数字符串的 Ruby RSA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121275/

相关文章:

Ruby - 实际上获取实例的所有方法

ruby-on-rails - Rails 在使用 PostgreSQL 时出错

javascript - 有没有办法在 my/public/javascripts 目录中的 javascript 文件中执行嵌入式 ruby​​?

go - 导入字符串 RSA 公钥以在 Go 中使用 RSA 加密

java - 从文件加载 RSA 公钥

ruby - Ruby 方法 instance_eval() 和 send() 不会否定私有(private)可见性的好处吗?

ruby-on-rails - Rails ActiveStorage 错误 - MessageVerifier-InvalidSignature

rsa - 使用 RSA 在 JS 中加密消息并在 Python 中解密

iphone - 将 OpenSSH RSA 公钥/私钥对导入 Apple 的钥匙串(keychain)访问

java - Android中的RSA,解密未知 key 类型错误