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

标签 excel vba jwt rsa sha256

我正在尝试在 VBA 中生成 JSON Web token (JWT)。我需要用 RS256 签名。到目前为止,我设法创建了 base64 编码的 header 和有效负载。他们都工作正常。

现在我坚持使用 RS256 签署 JWT header +有效负载。我找不到默认的 VBA 类或函数,它提供 RSA-SHA256 使用私钥进行加密。在微软官方文档中,我只找到了使用公钥加密的方法: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 框架组件来解决问题。

' 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)

任何人都可以提供解决方案或指出可能的方向吗?

最佳答案

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

关于excel - VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62429787/

相关文章:

php - 复杂的报告 PHP MySQL

vba - 在本地目录中创建文件夹后保存 Outlook 附件

vba - Workbooks.Open 填充 "source"而不是 "target"文件

c# - 如何加密 JWT 安全 token ?

excel - 是否可以通过 Google Script 填写 PDF 表单?或者通过云端的 Google Script 在 PDF 上添加文本?

sql-server - SSIS导入Excel数据

python - 在 panda 数据框中插入值

Excel VBA - 如何在 For 循环中以 1 到 1 的级别比较两个范围?

scala - Play 框架和 JSON Web token

node.js - 使用 Azure Key Vault 或 JWT 时,设置和检索/解密元数据的正确设计是什么。 1 对多还是 1 对 1 键?