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

VBA:如何基于VBA中的私钥生成RS256签名?

汪德寿
2023-03-14

我试图在VBA中生成JSON Web令牌(JWT)。我需要用RS256签名。到目前为止,我成功地创建了base64编码的报头和有效负载。他们两人都工作得很好。

现在我被困在用RS256签署JWT报头有效载荷上了。我找不到默认的VBA类或函数,它提供RSA-SHA256使用私钥进行加密。在官方的微软留档中,我只找到了使用公钥加密的方法:https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa?view=netcore-3.1.此外,我甚至不确定组件是否是COM可见的。

我在Stackoverflow中的搜索结果也需要公钥而不是私钥进行加密,或者尚未解决:

如何通过VBA生成RSA-SHA1和私钥签名?使用Microsoft Excel进行RSA加密

我知道,我可能会使用为RSA提供私钥的扩展,甚至是JWT生成的完整实现。然而,由于安全问题和货币方面的原因,我不能或不想使用这种扩展。这意味着,我想解决默认VBA和可访问的Microsoft Framework组件的问题。

' Generate RSA keypair (later, private key must be imported from PEM-File)
Set csp = CreateObject("System.Security.Cryptography.RSACryptoServiceProvider")
privateKey = csp.ExportParameters(True)
publicKey = csp.ExportParameters(False)

' Create test-string for signing
Dim dataString As String
dataString = "Data"

' Convert test-string to bytes
Dim dataByte() As Byte
dataByte = StrConv(dataString, vbFromUnicode)

' Create instance of SHA256 (NOT WORKING!)
'   Run-time error '429':
'   ActiveX component can't create object
Set SHA256 = CreateObject("System.Security.Cryptography.SHA256CryptoServiceProvider")

' Create instance of RSA algorithm
Set RSAalg = CreateObject("System.Security.Cryptography.RSACryptoServiceProvider")
' Load private key
RSAalg.ImportParameters (privateKey)

' Sign data (propably not working - tried with SHA1)
'   Run-time error '5':
'   Invalid procedure call or argument
Dim signedData() As Byte
signedData = RSAalg.signData(dataByte(), SHA256)

Debug.Print StrConv(signedData, vbUnicode)

谁能提供一个解决方案或给我指出一个可能的方向?

共有1个答案

燕涵容
2023-03-14

signdata()是一个错误,您需要使用signhash()

encryt与rsa sha256 sha1 md5 vbscript vba经典asp

https://github.com/ekede/WTS-Classic-ASP-MVC-Framework/blob/master/inc/class/crypt/rsa.asp

 类似资料:
  • 我正在使用jose-jwt库,并希望使用RS256加密算法在C#中创建一个有签名的JWT。我对密码学没有经验,所以请原谅我的无知。我在文档中看到以下示例: 它显示了文件的使用,但是如何使用下面表单的RSA密钥文件呢?我正在查看X509Certificate2的文档,但我看不到RSA私钥的选项。它似乎只接受,我认为这是公钥。 最后,文档中列出的两个选项之间的区别是什么?我如何在这两个选项之间进行选择

  • 以下网站经常被引用,而且我认为是准确的: https://gobittest.appspot.com/Address 我试图在Golang中重现这些步骤,但第一步就失败了:-( 有人能给我提供一个Golang片段,给定ECDSA私钥,返回公钥吗?我想我可能具体指的是上述站点示例中的私钥指数和公钥指数。 i、 例如,给定随机生成的(十六进制编码的)私钥(指数?)<代码>E83385AF76B2B19

  • 我需要与GitHub集成API进行交互,但具体是从。NET 4.0,所以我不能使用Octokit。 基本上,我得到了一个格式化的私有rsa密钥(标准不支持。NET API),并且必须发送RS256 jwt令牌才能获得与API交互的身份验证令牌。 提供了以下ruby示例代码: 使用下面的curl示例 以及以下Result示例:

  • 我正在Erlang中创建一个应用程序,给定一个RSA私钥,它可以返回RSA公钥和与该priv密钥相关联的x509公钥。 ----只是一个更新---- 在花了一些时间了解x509并阅读了Erlang public_key文档后,我找到了一个解决方案: 如果我可以通过简单地获取模数和publicExponent,从“RSaprivateKey”生成“RSapublicKey”,那么生成这两个键的代码如

  • 如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥: 我得到: PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为例子。有没有办法使用OpenSSL创建一个由DES密钥加密的PKCS8密钥?如果不是,它是OpenSSL不支持的还是一个非常不标准的事情? 下面是通过OpenSSL命令行(密码测试)使用基于密码的加密创建的示例: 这里是我手工制作

  • 我们要求用户可以隐藏/取消隐藏Excel列并在其中移动。用户单击generate CSV按钮后,我们希望列按特定顺序排列。例如,Col1、Col2、Col3是Excel第一行A、B、C列中的列标题。用户将Col2列移到了末尾,并隐藏了Col2:A、B、C列现在有标题:Col1、Col3、Col2(隐藏) 我们的CSV文件应该生成为:Col1,Col2,Col3。使用下面的代码,我们无法看到Col2