由于填充检查失败,Ruby OpenSSL RSA 解密失败

And*_*ley 5 ruby python encryption cryptography rsa

我正在尝试在 ruby​​ 中复制以下 python 代码。python 代码工作正常,ruby 代码由于“填充检查失败”而失败。我可以加密一个字符串并使用 Ruby 中的私钥对其进行解密,但我需要使用的加密数据是从其他地方检索的。我不确定该库,甚至不确定用于加密它的语言,但 Python 代码可以工作。

工作Python代码:

def decrypt_secret(encrypted_base64, private_key):
  key = RSA.importKey(open(private_key, "r").read())
  pkey = PKCS1_OAEP.new(key, hashAlgo=SHA256)
  encrypted_blob = base64.urlsafe_b64decode(encrypted_base64)
  decrypted_string = pkey.decrypt(encrypted_blob)
  return decrypted_string
Run Code Online (Sandbox Code Playgroud)

Ruby 代码失败“填充检查失败”

def decrypt_secret(encrypted_base64, private_key)
  key = File.read(private_key)
  pkey = OpenSSL::PKey::RSA.new(key)
  encrypted_blob = Base64.urlsafe_decode64(encrypted_base64)
  decrypted_string = pkey.private_decrypt(encrypted_blob, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING)
  return decrypted_string
end 
Run Code Online (Sandbox Code Playgroud)

And*_*ley 4

我发现JOSE gem中包含支持 SHA256 OAEP所需的函数。下面的代码完成了这个工作:

require 'jose'
def decrypt_secret(encrypted_base64, private_key)
  key = File.read(private_key)
  pkey = OpenSSL::PKey::RSA.new(key)
  encrypted_blob = Base64.urlsafe_decode64(encrypted_base64)
  decrypted_string = JOSE::JWA::PKCS1::rsaes_oaep_decrypt(OpenSSL::Digest::SHA256, encrypted_blob, pkey)
  return decrypted_string
end
Run Code Online (Sandbox Code Playgroud)