Frage AES verschlüsseln Zeichenfolge in VB.NET


Ich habe ein Programm in Visual Basic 2010 basiert.

Ich möchte ein benutzerdefiniertes Schlüsselwort und eine AES-Verschlüsselung verwenden, um Registrierungsschlüssel auf unserer Unternehmenswebsite zu generieren, die die Software unabhängig davon freischalten, ob die Software mit dem Internet verbunden ist oder nicht.

Zu diesem Zweck möchte ich bestimmte Benutzerinformationen (und einen Validierungscode) in eine AES-verschlüsselte Zeichenfolge mit einem Dienstprogramm verschlüsseln, das ich auf meiner Website erstellen werde. Dann möchte ich, dass mein Programm die Zeichenfolge in den Benutzerinformationen und den Validierungscode entschlüsselt und dann diese Informationen verwendet, um den Registrierungsschlüssel zu validieren.

Was mich zu der Frage bringt, wie ich eine Zeichenfolge in AES programmatisch verschlüsseln und entschlüsseln kann. Gibt es eine Codevorlage, die ich irgendwo verwenden kann, oder eine eingebaute Methode?


15
2018-05-13 04:19


Ursprung


Antworten:


Eine schnelle Google-Suche zeigt folgende Funktionen an: Ich habe nicht getestet, ob die von ihnen erzeugte Ausgabe korrekt ist, sie scheinen jedoch korrekt zu kompilieren.

Public Function AES_Encrypt(ByVal input As String, ByVal pass As String) As String
        Dim AES As New System.Security.Cryptography.RijndaelManaged
        Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
        Dim encrypted As String = ""
        Try
            Dim hash(31) As Byte
            Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
            Array.Copy(temp, 0, hash, 0, 16)
            Array.Copy(temp, 0, hash, 15, 16)
            AES.Key = hash
            AES.Mode = Security.Cryptography.CipherMode.ECB
            Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
            Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input)
            encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
            Return encrypted
        Catch ex As Exception
        End Try
    End Function

Public Function AES_Decrypt(ByVal input As String, ByVal pass As String) As String
        Dim AES As New System.Security.Cryptography.RijndaelManaged
        Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
        Dim decrypted As String = ""
        Try
            Dim hash(31) As Byte
            Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
            Array.Copy(temp, 0, hash, 0, 16)
            Array.Copy(temp, 0, hash, 15, 16)
            AES.Key = hash
            AES.Mode = Security.Cryptography.CipherMode.ECB
            Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
            Dim Buffer As Byte() = Convert.FromBase64String(input)
            decrypted = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
            Return decrypted
        Catch ex As Exception
        End Try
    End Function

Aus: http://www.l33thackers.com/Thread-VB-NET-AES-Verschlüsselung 


27
2018-05-13 11:40



Bearbeiten: Danke an Artjom B. um mich über einen Fehler bei der Entschlüsselung von AES-CBC zu informieren, der aufgrund meiner falschen Annahme auftrat, dass die IV-Strings immer mit == (in Base64) enden, was falsch ist. Dank an Kanky für dieses Thema und danke an Elend um eine Lösung dafür zu bieten dieser Link. Beachten Sie, dass ich seine / ihre Reparatur nicht selbst überprüft habe, aber hoffentlich ist es korrekt.

Unten finden Sie zwei Lösungen zum Verschlüsseln von Strings mit AES. Der erste verwendet den CBC-Modus mit einer automatisch generierten IV und ist sicherer. Die Verwendung von IV mit dem CBC-Modus stellt sicher, dass sogar die gleichen Klartext-Schlüssel-Paare unterschiedliche Chiffriertexte ergeben und somit sicherer machen. Der zweite verwendet EZB mehr und sollte nicht für repetitive Klartextverschlüsselung verwendet werden. AES.Key wird generiert, indem die Eingabeschlüsselzeichenfolge mit SHA256 hashed wird; Sie müssen sich also keine Sorgen um die Pseudozufallslage Ihres Schlüssels machen.

Dieser ist AES-CBC. IV wird automatisch von der eingebauten Funktion generiert und mit dem Chiffretext verkettet und als Ausgabe des Verschlüsselungsalgorithmus zurückgegeben. Der Entschlüsselungsalgorithmus teilt diesen verketteten Text auf, um den IV und den tatsächlichen Chiffretext wiederherzustellen.

Private Function AESE(ByVal plaintext 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 ciphertext As String = ""
    Try
        AES.GenerateIV()
        AES.Key = SHA256.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))

        AES.Mode = Security.Cryptography.CipherMode.CBC
        Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
        Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(plaintext)
        ciphertext = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))

       Return Convert.ToBase64String(AES.IV) & Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))

    Catch ex As Exception
        Return ex.Message
    End Try
End Function

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

Dies ist der AES-ECB-Modus. Es verwendet keine IV. Die gleichen Klartexte ergeben immer dieselben Chiffriertexte (natürlich unter dem gleichen Schlüssel) und umgekehrt.

Private Function AESE(ByVal input As Byte(), ByVal key As String) As Byte()
    Dim AES As New System.Security.Cryptography.RijndaelManaged
    Dim SHA256 As New System.Security.Cryptography.SHA256Cng
    Dim ciphertext As String = ""
    Try
        AES.Key = SHA256.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))
        AES.Mode = Security.Cryptography.CipherMode.ECB
        Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
        Dim Buffer As Byte() = input
        Return DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)
    Catch ex As Exception
    End Try
End Function

Private Function AESD(ByVal input As Byte(), ByVal key As String) As Byte()
    Dim AES As New System.Security.Cryptography.RijndaelManaged
    Dim SHA256 As New System.Security.Cryptography.SHA256Cng
    Try
        AES.Key = SHA256.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))
        AES.Mode = Security.Cryptography.CipherMode.ECB
        Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
        Dim Buffer As Byte() = input
        Return DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)
    Catch ex As Exception
    End Try
End Function

6
2018-05-24 12:33



Sie können den CBC-Modus verwenden, um Dateien relativ einfach zu verschlüsseln. Verwenden Sie uuencode / uudecode, um eine Binärdatei in eine Textdarstellung und zurück zu konvertieren. Siehe relative Informationen hier: http://www.nullskull.com/a/237/uuencode-and-uudecode-in-vbnet-and-c.aspx  und hier: https://social.msdn.microsoft.com/Forums/vstudio/en-US/5d4eaed8-1984-4639-aebb-bb2afddbfb8a/how-to-uuencodeuudecode-file-in-vbnet?forum=vbgeneral


0
2017-12-10 23:05