首页 > 解决方案 > 如何使用 RSA 以这种特殊方式使用 criptonite 库解密 ByteString?

问题描述

我在 Elixir/Erlang 中有一些我继承的代码:

  res = :crypto.private_decrypt(:rsa, my_bin_data, rsa_priv_key, [{:rsa_padding, :rsa_pkcs1_oaep_padding}])

我想将其转换为 Haskell。我正在使用cryptonite库及其模块 RSA。我的问题是关于必须传递给它以使其与 Elixir 代码完全相同的参数的问题。

import qualified Crypto.PubKey.RSA.PKCS15 as RSA
-- [.........]

res <- RSA.decrypt None privateKey myBinData

我应该将什么作为:rsa_padding:rsa_pkcs1_oaep_padding参数传递给函数?

标签: haskellerlangelixirrsa

解决方案


根据openssl 手册页rsa_pkcs1_oaep_padding

EME-OAEP 在 PKCS #1 v2.0 中定义,带有 SHA-1、MGF1 和空编码参数

您应该decryptCrypto.PubKey.RSA.OAEP模块中使用,并使用defaultOAEPParamswithSHA1作为哈希:

import qualified Crypto.PubKey.RSA.OAEP as RSA
import Crypto.Hash.Algorithms ( SHA1 )

...

res <- RSA.decrypt None (RSA.defaultOAEPParams SHA1) privateKey myBinData

推荐阅读