当前位置: 首页 > 知识库问答 >
问题:

使用RSA SHA 256对字符串进行签名,仅将私钥作为字符串。网

司空丰
2023-03-14

我们正在通过RESTful API与Google进行集成,我需要用RSA-SHA256对JWT的有效负载进行签名,我所拥有的只是一个字符串形式的私钥,看起来像

-----BEGIN PRIVATE KEY-----
MIIEvgIBfADANBg9qhkdsiG9w0BAQEFAASCBKgw
......
-----END PRIVATE KEY-----

我一直在到处寻找解决方案,但每个人都在谈论X509Certificate2,它需要一个p12文件或一些证书。现在我没有这两个,我只有一个字符串作为私钥。

谷歌推荐https://jwt.io/它与键字符串一起工作,但是我需要我的代码来完成它。页面中列出了3个库:

  1. 其中一个属于微软,绝对没有留档。
  2. 另一个是使用X509证书2,或者特别是字符串键只有一个链接到这个地方http://www.donaldsbaconbytes.com/2016/08/create-jwt-with-a-private-rsa-key/它使用了一些我没有的证书文件,使它成为一个错误和无益的链接。
  3. #2的相同创建者有另一个库,但它是针对手机的,它实际上有一个RSA256签名的方法,它将私钥作为完全是我格式的字符串。

所以我的问题是,我的案例是否有可行的解决方案?因为我不敢相信没有人能与谷歌整合。

共有1个答案

莘绍元
2023-03-14

我知道有一种方法可以将其转换为pfx,您可以在C#中使用。

首先,如果你还没有安装OpenSSL。(你可以得到最新的"Win64 OpenSSL v#.#.#x光"从http://slproweb.com/products/Win32OpenSSL.html,虽然我对此来源不承担任何责任。)

您可能希望将“C:\Program Files\OpenSSL\bin\”添加到帐户的path变量中,以便可以从命令行中的任何位置使用“OpenSSL.exe”。

在命令窗口中,导航到私钥文件所在的位置。让我们称之为“priv.key”。发出以下两个命令,忽略注释:

# Create public self-signed certificate CRT file (with 7000yr validity) from private key (may leave all info empty)
openssl req -x509 -sha256 -new -key priv.pem -out pub.crt -days 2555000

# Combine into PFX container (encrypted with AES-256) (certificate needs to be included for .NET to read successfully)
openssl pkcs12 -export -aes256 -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -inkey priv.pem -in pub.crt -out priv.pfx

请注意,在最后一个命令上,我正在创建一个加密的pfx(这是可选的——我相信你可以用-节点来替换-Asi256来跳过它),我正在配置密码提供程序,以便密钥可以用于SHA256操作,没有C#抱怨。

现在您有了一个pfx文件,可以使用X509Certificate2的构造函数加载该文件。

我倾向于将此备忘单用于常见的OpenSSL命令:https://www.sslshopper.com/article-most-common-openssl-commands.html

 类似资料:
  • 我有以下字符串格式的RSA私钥。 我正在尝试使用下面的代码片段将其转换为PrivateKey类型- 我正在犯错误- 它给我一个错误的生成私人方法。 尝试在这里使用Java的答案:将DKIM私钥从RSA转换为用于JavaMail的DER

  • 我有一个公钥和一个私钥,还有一个字符串,我想要解密。 公钥的格式如下: 私钥的格式如下: 我要解密的字符串已经使用公钥加密,然后我需要使用私钥解密它。

  • 问题内容: Apache Commons和JSch都需要私钥文件来建立SFTP连接。我正在处理的项目将用于连接到多个SFTP服务器。因此,我们不希望部署多个私钥文件,而是将这些密钥作为字符串保留在加密的配置文件中。是否有一个不需要文件对象作为私钥的SFTP库? 问题答案: JSch有一个addIdentity方法重载,它从缓冲区中获取密钥: 有关实现的示例,请参见JSch:来自存储在hdfs上的私

  • 我想比较正确的类,而不是字符串,对表进行正确排序。我正在使用TableRowSorter: 我重写了CustomModelTable中的方法getColumnClass,因此根据列的名称获得了正确的类(这是因为类型是通过编程定义的): 这是一个屏幕截图:表格排序错误 最奇怪的是我打印了这些类型: 并返回预期输出(打印上表): 老实说,我不知道我做错了什么。

  • 我习惯于在JavaScript中这样做: 斯威夫特没有这个功能,怎么做类似的东西?

  • 在Android中,我使用下面的代码将String转换为RSA私钥 https://www.devglan.com/online-tools/rsa-encryption-decryption 但是,当我使用这个网站时,我的代码不起作用。 https://8gwifi.org/RSAFunctionality?keysize=1024 我在Android studio中的代码是: 与第二个链接错误