haskell - 如何使用 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
参数传递给函数?
解决方案
根据openssl 手册页,rsa_pkcs1_oaep_padding
是
EME-OAEP 在 PKCS #1 v2.0 中定义,带有 SHA-1、MGF1 和空编码参数
您应该decrypt
从Crypto.PubKey.RSA.OAEP
模块中使用,并使用defaultOAEPParams
withSHA1
作为哈希:
import qualified Crypto.PubKey.RSA.OAEP as RSA
import Crypto.Hash.Algorithms ( SHA1 )
...
res <- RSA.decrypt None (RSA.defaultOAEPParams SHA1) privateKey myBinData
推荐阅读
- c# - Asp Core Web App,使用 Azure Devops 部署时为 404,通过 Visual Studio 发布时为 200
- javascript - Internet Explorer 中的 JavaScript 菜单下拉问题
- python - Python - 绘制具有不均匀错误(高和低)的错误条形图
- nginx - 为每个请求启用 CORS
- php - 从 Woocommerce 中的产品评论选项卡菜单项中删除 (0)
- jquery - 如何鼠标悬停一个div,当另一个实际上悬停时,反之亦然
- android - 无法在 android studio 中运行 .apk 文件
- java - 在 jpa CRUD 存储库中保存和更新
- javascript - 其他 js 函数忽略了我的实时计算函数
- vb.net - 在 RichTextBox 中搜索特定字符的第一次出现返回 -1