Jup, so (ähnlich) würde ich es auch machen. Das Gleiche kannst Du auch mit dem Salt machen, allerdings musst Du dafür natürlich dessen Bytes bekommen.
Ich hab mal irgendwo was für AES gefunden (leider keine Quelle mehr, aber der Code ist nicht auf meinem Mist gewachsen halt, hab's aus'm vb@rchiv) und ein wenig modifiziert. Das nutze ich bei mir:
Spoiler anzeigen
Ich sehe gerade: inkosequent, weil oben ohne doppeltes Using, unten mit. Der Codeanalyse meckert bei verschachteltem Using, weil der äußere Stream doppelt disposed werden kann. Naja, aber vom Prinzip zumindest ...
Ich hab mal irgendwo was für AES gefunden (
VB.NET-Quellcode
- Imports System.Security.Cryptography
- Public Module TextCrypting
- Public Function CryptText(TextToCrypt As String, Password As String, Salt As String) As String
- If Not PrimaryCriteriasAreFulfilled(TextToCrypt, Password, Salt) Then Return Nothing
- Dim Aes = GetAesFrom(Password, Salt)
- Dim MemoryStream As New IO.MemoryStream
- Dim CryptoStream As New CryptoStream(MemoryStream, Aes.CreateEncryptor(), CryptoStreamMode.Write)
- Dim Data = Text.Encoding.UTF8.GetBytes(TextToCrypt)
- CryptoStream.Write(Data, 0, Data.Length)
- CryptoStream.FlushFinalBlock()
- Dim CryptedText = Convert.ToBase64String(MemoryStream.ToArray)
- CryptoStream.Dispose()
- MemoryStream.Dispose()
- Aes.Clear()
- Aes.Dispose()
- Return CryptedText
- End Function
- Private Function PrimaryCriteriasAreFulfilled(TargetText As String, Password As String, Salt As String) As Boolean
- Return Not String.IsNullOrEmpty(TargetText) AndAlso Not String.IsNullOrEmpty(Password) AndAlso Password.Length >= 8 AndAlso Not String.IsNullOrEmpty(Salt) AndAlso Salt.Length >= 8
- End Function
- Private Function GetAesFrom(Password As String, Salt As String) As AesManaged
- Dim GeneratedKey As New Rfc2898DeriveBytes(Password, Text.Encoding.UTF8.GetBytes(Salt))
- Dim Aes As New AesManaged With {.KeySize = 256, .BlockSize = 128, .Key = GeneratedKey.GetBytes(.KeySize \ 8), .IV = GeneratedKey.GetBytes(.BlockSize \ 8)}
- GeneratedKey.Dispose()
- Return Aes
- End Function
- Public Function DecryptText(CryptedText As String, Password As String, Salt As String) As String
- If Not PrimaryCriteriasAreFulfilled(CryptedText, Password, Salt) Then Return Nothing
- Dim Aes = GetAesFrom(Password, Salt)
- Using MemoryStream As New IO.MemoryStream
- Try
- Using CryptoStream As New CryptoStream(MemoryStream, Aes.CreateDecryptor(), CryptoStreamMode.Write)
- Dim Data = Convert.FromBase64String(CryptedText)
- CryptoStream.Write(Data, 0, Data.Length)
- CryptoStream.FlushFinalBlock()
- End Using
- Dim DecryptedText = Text.Encoding.UTF8.GetString(MemoryStream.ToArray)
- Aes.Clear()
- Return DecryptedText
- Catch CE As CryptographicException
- Return Nothing
- Catch FE As FormatException
- Return Nothing
- Finally
- Aes.Dispose()
- End Try
- End Using
- End Function
- End Module
Ich sehe gerade: inkosequent, weil oben ohne doppeltes Using, unten mit. Der Codeanalyse meckert bei verschachteltem Using, weil der äußere Stream doppelt disposed werden kann. Naja, aber vom Prinzip zumindest ...
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()