我正在尝试在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)
任何人都可以提供解决方案或向我指出可能的方向吗?
答案 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