VB. NET - Расшифровка уже зашифрованного пароля из файла с файлом ключей aes - PullRequest
0 голосов
/ 04 августа 2020
• 1000

Этап 1: GUI с вызовами сценариев PowerShell, включая зашифрованный пароль. Он работает, но вызывает медленные вызовы сценариев PowerShell.

Я конвертирую все функции, которые могу использовать для подключения SDK, и хочу преобразовать функцию дешифрования в VB, а не вызывать powershell.

Мой зашифрованный пароль и ключ AES находится в файлах. Найденные примеры у меня не работают. В частности, соединение SDK полагается на SecureString для передачи пароля соединению SDK, но оно не может преобразовать значение в SecureString.

Я могу использовать SecureString, и во время отладки не вижу способа в этом методе делать то, что было выполнено с помощью Powershell, захватив зашифрованный пароль и направив его по конвейеру в ConvertTo-SecureString и передав параметр ключа в качестве моего файла AES.

Примеры шифрования / дешифрования советов по усилению его безопасности, которые я могу использовать вместо команде для подключения к SDK требуется SecureString, поэтому я должен попытаться получить информацию из файлов и преобразовать ее в SecureString, но не могу понять, как это сделать.

Я предпочитаю читать файлы, как в PS , преобразование в SecureString.

У меня есть это до сих пор, передавая мои местоположения для зашифрованного пароля и файла aes. Отладка проходит без проблем (я считаю), но я получаю исключения, преобразующиеся в SecureString, а в al oop для добавления символов я получаю исключение о недостаточных разрешениях, что заставляет меня думать, что он не расшифровывается как Я полагаю.

Private Function AESD(ByVal ciphertext As String, ByVal key As String) As String
    Dim AES As New System.Security.Cryptography.RijndaelManaged
    Dim SHA256 As New System.Security.Cryptography.SHA256Cng
    Dim plaintext As String = ""
    Dim iv As String = ""
    Try
        Dim ivct = ciphertext.Split({"=="}, StringSplitOptions.None)
        iv = ivct(0) & "=="
        ciphertext = If(ivct.Length = 3, ivct(1) & "==", ivct(1))

        AES.Key = SHA256.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))
        AES.IV = Convert.FromBase64String(iv)
        AES.Mode = Security.Cryptography.CipherMode.CBC
        Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
        Dim Buffer As Byte() = Convert.FromBase64String(ciphertext)
        plaintext = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
        Return plaintext
    Catch ex As Exception
        Return ex.Message
    End Try
End Function

Возможно, расшифровка не подходит для шифрования. Мне нужно, чтобы он работал в автоматическом режиме, предварительно сохраняя зашифрованный пароль для пользователей.

[РЕДАКТИРОВАТЬ]: вот Powershell, используемый для извлечения зашифрованного пароля

$password = Get-Content "locationtopasswordfile" | ConvertTo-SecureString -Key (Get-Content "locationtoAESkeyfile")
$credential = New-Object -typename System.Management.Automation.PSCredential -argumentlist "domainaccount",$password

Я использовал ссылку на

  1. Сгенерировать зашифрованный пароль
  2. На чем основан приведенный выше код PS.

Как зашифровать пароли в PowerShell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...