VBA: как я могу сгенерировать подпись с RS256 на основе закрытого ключа в VBA? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь создать 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)

Может ли кто-нибудь предоставить решение или указать мне возможное направление?

...