In meinem Job speichern wir die vollständigen Verbindungszeichenfolgen in der app.config, aber wir verschlüsseln sie mit AES256. Es funktioniert ziemlich gut und fügt eine Menge Sicherheit hinzu. Wir haben ein kleines Tool geschrieben, mit dem Sie Verbindungszeichenfolgen verschlüsseln und entschlüsseln können, sodass das Bearbeiten der app.config-Dateien ziemlich einfach ist. Wir haben nur den Verschlüsselungscode in der Anwendung fest codiert. Wenn also jemand die Baugruppen dekompilieren möchte, könnte er es herausfinden, aber es hebt die Messlatte hoch genug für unsere Bedürfnisse. Hier ist die Klasse, die wir verwenden, zu verschlüsseln und zu entschlüsseln, die Verbindungszeichenfolgen:
Public Class Aes256Base64Encrypter
Public Function Decrypt(ByVal encryptedText As String, ByVal secretKey As String) As String
Dim plainText As String = Nothing
Using inputStream As MemoryStream = New MemoryStream(System.Convert.FromBase64String(encryptedText))
Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
Using cryptoStream As CryptoStream = New CryptoStream(inputStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read)
Dim outputBuffer(0 To CType(inputStream.Length - 1, Integer)) As Byte
Dim readBytes As Integer = cryptoStream.Read(outputBuffer, 0, CType(inputStream.Length, Integer))
plainText = Unicode.GetString(outputBuffer, 0, readBytes)
End Using
End Using
Return plainText
End Function
Public Function Encrypt(ByVal plainText As String, ByVal secretKey As String) As String
Dim encryptedPassword As String = Nothing
Using outputStream As MemoryStream = New MemoryStream()
Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
Using cryptoStream As CryptoStream = New CryptoStream(outputStream, algorithm.CreateEncryptor(), CryptoStreamMode.Write)
Dim inputBuffer() As Byte = Unicode.GetBytes(plainText)
cryptoStream.Write(inputBuffer, 0, inputBuffer.Length)
cryptoStream.FlushFinalBlock()
encryptedPassword = System.Convert.ToBase64String(outputStream.ToArray())
End Using
End Using
Return encryptedPassword
End Function
Private Function getAlgorithm(ByVal secretKey As String) As RijndaelManaged
Const salt As String = "put a salt key here"
Const keySize As Integer = 256
Dim keyBuilder As Rfc2898DeriveBytes = New Rfc2898DeriveBytes(secretKey, Unicode.GetBytes(salt))
Dim algorithm As RijndaelManaged = New RijndaelManaged()
algorithm.KeySize = keySize
algorithm.IV = keyBuilder.GetBytes(CType(algorithm.BlockSize/8, Integer))
algorithm.Key = keyBuilder.GetBytes(CType(algorithm.KeySize/8, Integer))
algorithm.Padding = PaddingMode.PKCS7
Return algorithm
End Function
End Class
Eigentlich haben wir eingewickelt, dass innerhalb eines ConnectionStringEncrpyter Klasse, die den geheimen Schlüssel Hardcodes.
Ich sollte denken, dass das tun wird, danke. – MarioDS
Da diese Frage ziemlich viele Ansichten enthält, habe ich Ihre Antwort bearbeitet, um sicherzustellen, dass die Informationen nicht verloren gehen, sollte der Link jemals unterbrochen werden. – MarioDS
@pylover _Dies beantwortet die Frage, bietet aber keine geeignete Lösung_. Von MS-Link zur Verfügung gestellt; Der ** Hinweis sagt **: 'Die Verbindungszeichenfolge kann nur auf dem Computer entschlüsselt werden, auf dem sie verschlüsselt wurde. Der [aktualisierte MS-Link für den Artikel könnte die Lösung bieten] (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/protecting-connection-information) – wpcoder