VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?

Posted

技术标签:

【中文标题】VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?【英文标题】:VBA: How can I generate a signature with RS256 based on private key in VBA? 【发布时间】:2020-10-07 07:38:42 【问题描述】:

我正在尝试在 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 可见的。

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

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

我知道,我可能会使用可以为 RSA 提供私钥的扩展,甚至是 JWT 生成的完整实现。但是,由于安全问题和金钱方面的原因,我不能或不想使用此类扩展。这意味着,我想用默认 VBA 和可访问的 Microsoft 框架组件来解决问题。

' 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】:

signdata() 是错误,你需要使用 signhash()

用 rsa sha256 sha1 md5 vbscript vba 经典 asp 加密

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

【讨论】:

以上是关于VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有html标签的一列文本转换为excel中vba中的格式化文本

VBA根据查询运行带有参数的访问报告

如何导出keystore中的私钥

各种格式SSH 公钥和私钥之间的转换

使用OpenSSL生成私钥 Private Key 以及根据Private Key创建证书

Windows下生成 公钥 私钥以及 配置 Filezilla中的 SFTP的私钥