Я пытаюсь создать JSON веб-токен (JWT) в VBA. Мне нужно, чтобы он был подписан RS256. Пока мне удалось создать заголовок и полезную нагрузку в кодировке base64. Они оба работают нормально.
Теперь я застрял на подписи заголовка JWT + полезной нагрузки с помощью RS256. Я не могу найти класс или функцию VBA по умолчанию, которые обеспечивают работу RSA-SHA256 с закрытым ключом для шифрования. В официальной документации Microsoft я нашел только методы, использующие ключ publi c для шифрования: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa?view=netcore-3.1. Кроме того, я даже не уверен, видны ли компоненты COM.
Мои результаты поиска в Stackoverflow также либо хотят, чтобы для шифрования использовался ключ publi c, а не закрытый ключ, либо они еще не решены:
Как сгенерировать подпись с помощью RSA-SHA1 и закрытого ключа через VBA? Шифрование RSA с использованием 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)
Может ли кто-нибудь предоставить решение или указать мне возможное направление?