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

时间:2020-06-17 13:09:12

标签: excel vba jwt rsa sha256

我正在尝试在VBA中生成JSON Web令牌(JWT)。我需要使用RS256对其进行签名。到目前为止,我设法创建了base64编码的标头和有效负载。他们俩都工作正常。

现在,我被困在用RS256签名JWT标头+有效负载的过程中。我找不到默认的VBA类或函数,该类或函数可提供使用私钥进行加密的RSA-SHA256。在Microsoft官方文档中,我仅找到了使用公共密钥进行加密的方法:https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa?view=netcore-3.1。另外,我什至不确定这些组件是否在COM可见。

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

How to generate signature with RSA-SHA1 and private key through VBA? RSA encryption using Microsoft Excel

我知道,我可能会使用可以为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 个答案:

答案 0 :(得分:0)

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

使用rsa sha256 sha1 md5 vbscript vba classic asp加密

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