使用文件中的私钥进行RSA签名

焦os

使用Haskell,如何使用文件中的现有私钥进行签名?

在Python中,它很简单-

import M2Crypto
rsa = M2Crypto.RSA.load_key("path/to/key")
result = rsa.sign("foo")

看来您可以使用该Codec.Crypto.RSA模块进行签名-

http://hackage.haskell.org/package/RSA-1.0.6.2/docs/Codec-Crypto-RSA.html#g:2

但是我只看到如何从该模块生成新的私钥,而不使用现有的私钥。似乎该Network.TLS.Extra模块提供了从文件中读取私钥的功能-

http://hackage.haskell.org/package/tls-extra-0.6.1/docs/Network-TLS-Extra.html#g:6

不幸的是,从每个模块导出的PrivateKey类型彼此不兼容-

Couldn't match expected type `crypto-pubkey-types-0.4.0:Crypto.Types.PubKey.RSA.PrivateKey'
            with actual type `tls-1.1.5:Network.TLS.Crypto.PrivateKey'
托马斯·杜比森

我需要类似的东西,所以不久前我在包中添加了一些序列化/反序列化crypto-pubkey-openssh它不处理加密或ECC密钥,但满足大多数需求。

正如我的评论所说,您想要的是:

import Codec.Crypto.RSA (sign)
import Crypto.PubKey.OpenSsh (decodePrivate, OpenSshPrivateKey)
import Crypto.Types.PubKey.RSA (PrivateKey)
import Data.ByteString (ByteString)

throwLeft :: Either String OpenSshPrivateKey -> PrivateKey
throwLeft (Right (OpenSshPrivateKeyRsa k)) = k
throwLeft (Right _) = error "Wrong key type"
throwLeft (Left s)  = error $ "Error reading keys: " ++ s

readAndSign :: FilePath -> ByteString -> IO ByteString
readAndSign file msg = (flip sign msg . throwLeft . decodePrivate) `fmap` readFile file

请注意,此代码未经测试,但构件应该正确。你想在一个私人密钥来读取(readFiledecodePrivate)。执行一些错误检查(throwLeft)并在消息上签名(sign)。

编辑:我觉得确定该长度比问题中的Python示例长的方法很有帮助。似乎构建块是相同的,但是库所公开的抽象级别与错误处理(显式与异常)大不相同。如果我们假设库作者通过从一个模块中重新导出所有内容并定义了一个助手来做更多的工作:

loadKey :: FilePath -> IO PrivateKey
loadKey p = (throwLeft . decodePrivate) `fmap` readFile p

然后代码几乎相同:

k <-loadKey keyFile
let result = sign k msg

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用rsa私钥对数据签名

来自分类Dev

使用rsa私钥对数据签名

来自分类Dev

如何使用rs256算法使用我自己的rsa私钥对字节进行签名?

来自分类Dev

如何在python中使用加密的RSA私钥(AES-256-CBC)对数据进行签名

来自分类Dev

使用C#中的RSA私钥文件创建RSACryptoServiceProvider对象

来自分类Dev

使用通过Heroku工头从.env文件加载的RSA私钥对JWT签名时出错

来自分类Dev

如何使用RSA私钥和自签名证书生成p12文件?

来自分类Dev

如何使用RSA私钥和自签名证书生成p12文件

来自分类Dev

PHPStorm使用私钥对提交进行签名

来自分类Dev

使用部分私钥对RSA消息进行解密?

来自分类Dev

如何使用特定的私钥对文件进行分离签名?|| 为什么这失败了?

来自分类Dev

使用公共私钥进行数字签名

来自分类Dev

让他人使用我的私钥对APK进行签名-如何?

来自分类Dev

Android-使用私钥对RSA进行编码和解码?

来自分类Dev

C#BouncyCastle-使用公钥/私钥进行RSA加密

来自分类Dev

无法使用导入到AndroidKeyStore的RSA签名进行签名

来自分类Dev

使用RSA_PKCS1_OAEP_PADDING进行RSA签名

来自分类Dev

使用RSA_PKCS1_OAEP_PADDING进行RSA签名

来自分类Dev

不使用 RSA 私钥文件连接到服务器

来自分类Dev

使用.Net进行RSA签名并使用OpenSSL命令进行验证

来自分类Dev

Python密码术:无法使用PKCS1v15填充使用RSA私钥签名

来自分类Dev

.NET Core 3.1 [Windows 10 Pro OS]中的自签名RSA证书导出私钥参数异常

来自分类Dev

如何使用私钥用rsa-sha256签名字符串?

来自分类Dev

使用openssl在c ++中验证RSA签名

来自分类Dev

如何使用python中的RSA私钥加密数据?

来自分类Dev

如何使用python中的RSA私钥加密数据?

来自分类Dev

使用 XML 私钥解密 RSA

来自分类Dev

如何使用PEM_Write_RSA_PrivateKey加密RSA私钥并将其写入文件

来自分类Dev

如何使用RSA SHA-256哈希对JWT进行签名

Related 相关文章

  1. 1

    使用rsa私钥对数据签名

  2. 2

    使用rsa私钥对数据签名

  3. 3

    如何使用rs256算法使用我自己的rsa私钥对字节进行签名?

  4. 4

    如何在python中使用加密的RSA私钥(AES-256-CBC)对数据进行签名

  5. 5

    使用C#中的RSA私钥文件创建RSACryptoServiceProvider对象

  6. 6

    使用通过Heroku工头从.env文件加载的RSA私钥对JWT签名时出错

  7. 7

    如何使用RSA私钥和自签名证书生成p12文件?

  8. 8

    如何使用RSA私钥和自签名证书生成p12文件

  9. 9

    PHPStorm使用私钥对提交进行签名

  10. 10

    使用部分私钥对RSA消息进行解密?

  11. 11

    如何使用特定的私钥对文件进行分离签名?|| 为什么这失败了?

  12. 12

    使用公共私钥进行数字签名

  13. 13

    让他人使用我的私钥对APK进行签名-如何?

  14. 14

    Android-使用私钥对RSA进行编码和解码?

  15. 15

    C#BouncyCastle-使用公钥/私钥进行RSA加密

  16. 16

    无法使用导入到AndroidKeyStore的RSA签名进行签名

  17. 17

    使用RSA_PKCS1_OAEP_PADDING进行RSA签名

  18. 18

    使用RSA_PKCS1_OAEP_PADDING进行RSA签名

  19. 19

    不使用 RSA 私钥文件连接到服务器

  20. 20

    使用.Net进行RSA签名并使用OpenSSL命令进行验证

  21. 21

    Python密码术:无法使用PKCS1v15填充使用RSA私钥签名

  22. 22

    .NET Core 3.1 [Windows 10 Pro OS]中的自签名RSA证书导出私钥参数异常

  23. 23

    如何使用私钥用rsa-sha256签名字符串?

  24. 24

    使用openssl在c ++中验证RSA签名

  25. 25

    如何使用python中的RSA私钥加密数据?

  26. 26

    如何使用python中的RSA私钥加密数据?

  27. 27

    使用 XML 私钥解密 RSA

  28. 28

    如何使用PEM_Write_RSA_PrivateKey加密RSA私钥并将其写入文件

  29. 29

    如何使用RSA SHA-256哈希对JWT进行签名

热门标签

归档