Wie sicher ist VB.NET Rijndael mit Managed-Verschlüsselung oder AES?
Benutze ich eine leicht modifizierte version von dieser code. erstellen Sie eine unternehmenskritische Anwendung. Dateien, die verschlüsselt sind sehr wichtig. Dies muss getan werden, von Grund auf, weil es gibt einige andere Dinge, die getan werden muss, zusammen mit diesem.
Wie sicher ist diese? Seine unmöglich zu knacken dieser Verschlüsselung, richtig?
Tut mir sehr Leid hier ist ein funktionierender link. http://www.codeproject.com/Articles/12092/Encrypt-Decrypt-Files-in-VB-NET-Using-Rijndael
Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
'*************************
'** Global Variables
'*************************
Dim strFileToEncrypt As String
Dim strFileToDecrypt As String
Dim strOutputEncrypt As String
Dim strOutputDecrypt As String
Dim fsInput As System.IO.FileStream
Dim fsOutput As System.IO.FileStream
'*************************
'** Create A Key
'*************************
Private Function CreateKey(ByVal strPassword As String) As Byte()
'Convert strPassword to an array and store in chrData.
Dim chrData() As Char = strPassword.ToCharArray
'Use intLength to get strPassword size.
Dim intLength As Integer = chrData.GetUpperBound(0)
'Declare bytDataToHash and make it the same size as chrData.
Dim bytDataToHash(intLength) As Byte
'Use For Next to convert and store chrData into bytDataToHash.
For i As Integer = 0 To chrData.GetUpperBound(0)
bytDataToHash(i) = CByte(Asc(chrData(i)))
Next
'Declare what hash to use.
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
'Declare bytResult, Hash bytDataToHash and store it in bytResult.
Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
'Declare bytKey(31). It will hold 256 bits.
Dim bytKey(31) As Byte
'Use For Next to put a specific size (256 bits) of
'bytResult into bytKey. The 0 To 31 will put the first 256 bits
'of 512 bits into bytKey.
For i As Integer = 0 To 31
bytKey(i) = bytResult(i)
Next
Return bytKey 'Return the key.
End Function
'*************************
'** Create An IV
'*************************
Private Function CreateIV(ByVal strPassword As String) As Byte()
'Convert strPassword to an array and store in chrData.
Dim chrData() As Char = strPassword.ToCharArray
'Use intLength to get strPassword size.
Dim intLength As Integer = chrData.GetUpperBound(0)
'Declare bytDataToHash and make it the same size as chrData.
Dim bytDataToHash(intLength) As Byte
'Use For Next to convert and store chrData into bytDataToHash.
For i As Integer = 0 To chrData.GetUpperBound(0)
bytDataToHash(i) = CByte(Asc(chrData(i)))
Next
'Declare what hash to use.
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
'Declare bytResult, Hash bytDataToHash and store it in bytResult.
Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
'Declare bytIV(15). It will hold 128 bits.
Dim bytIV(15) As Byte
'Use For Next to put a specific size (128 bits) of bytResult into bytIV.
'The 0 To 30 for bytKey used the first 256 bits of the hashed password.
'The 32 To 47 will put the next 128 bits into bytIV.
For i As Integer = 32 To 47
bytIV(i - 32) = bytResult(i)
Next
Return bytIV 'Return the IV.
End Function
Verschlüsselung und Entschlüsselung
'****************************
'** Encrypt/Decrypt File
'****************************
Private Enum CryptoAction
'Define the enumeration for CryptoAction.
ActionEncrypt = 1
ActionDecrypt = 2
End Enum
Private Sub EncryptOrDecryptFile(ByVal strInputFile As String, _
ByVal strOutputFile As String, _
ByVal bytKey() As Byte, _
ByVal bytIV() As Byte, _
ByVal Direction As CryptoAction)
Try 'In case of errors.
'Setup file streams to handle input and output.
fsInput = New System.IO.FileStream(strInputFile, FileMode.Open, _
FileAccess.Read)
fsOutput = New System.IO.FileStream(strOutputFile, _
FileMode.OpenOrCreate, _
FileAccess.Write)
fsOutput.SetLength(0) 'make sure fsOutput is empty
'Declare variables for encrypt/decrypt process.
Dim bytBuffer(4096) As Byte 'holds a block of bytes for processing
Dim lngBytesProcessed As Long = 0 'running count of bytes processed
Dim lngFileLength As Long = fsInput.Length 'the input file's length
Dim intBytesInCurrentBlock As Integer 'current bytes being processed
Dim csCryptoStream As CryptoStream
'Declare your CryptoServiceProvider.
Dim cspRijndael As New System.Security.Cryptography.RijndaelManaged
'Setup Progress Bar
pbStatus.Value = 0
pbStatus.Maximum = 100
'Determine if ecryption or decryption and setup CryptoStream.
Select Case Direction
Case CryptoAction.ActionEncrypt
csCryptoStream = New CryptoStream(fsOutput, _
cspRijndael.CreateEncryptor(bytKey, bytIV), _
CryptoStreamMode.Write)
Case CryptoAction.ActionDecrypt
csCryptoStream = New CryptoStream(fsOutput, _
cspRijndael.CreateDecryptor(bytKey, bytIV), _
CryptoStreamMode.Write)
End Select
'Use While to loop until all of the file is processed.
While lngBytesProcessed < lngFileLength
'Read file with the input filestream.
intBytesInCurrentBlock = fsInput.Read(bytBuffer, 0, 4096)
'Write output file with the cryptostream.
csCryptoStream.Write(bytBuffer, 0, intBytesInCurrentBlock)
'Update lngBytesProcessed
lngBytesProcessed = lngBytesProcessed + _
CLng(intBytesInCurrentBlock)
'Update Progress Bar
pbStatus.Value = CInt((lngBytesProcessed / lngFileLength) * 100)
End While
'Close FileStreams and CryptoStream.
csCryptoStream.Close()
fsInput.Close()
fsOutput.Close()
Habe ich eingefügt, die wichtigsten codes von dort nach hier.
- Der link schon nicht mehr funktioniert, bitte aktualisieren Sie Ihre Frage und fügen Sie den code. Links flüchtig sind, Fragen/Antworten auf stackoverflow sollte nicht sein.
- Ich habe aktualisiert, der link und fügte hinzu, die wichtigsten codes hier.
- Cool, steigerte Sie Ihre Frage für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt nichts ist unmöglich zu knacken sind, können Sie nur die empfohlenen Vorgehensweisen befolgen, um es so schwer wie möglich für potenzielle Angreifer.
Eigentlich den code, den Sie verlinkt ist, nicht als state-of-the-art mehr (wenn es das jemals war). Schafft es der symmetrische Verschlüsselungs-Schlüssel durch hashing ein Passwort. Das ist schlecht, weil die Passwörter in der Regel nicht über genügend Entropie zu vereiteln, komplexe Angriffe, basierend auf Wörterbücher. Darüber hinaus spielt es keine Salz oder äquivalent, so ist es ziemlich leicht angreifbar, dies mit vorausberechneten Tabellen.
Wann immer Sie können, sollten Sie generieren symmetrische Schlüssel mit einem sicheren PRNG (pseudo-random number generator). Wenn es keine Besondere Notwendigkeit für die Einbeziehung von Kennwörtern, tun Sie es nicht. Wenn es unbedingt sein muss, die Passwörter zu PBKDF2 aus PKCS5 oder alternativen wie bcrypt oder scrypt.
Die IV sollte auch immer generiert werden, aus einer sicheren PRNG, und nie wieder verwendet werden, wenn möglich. Es gibt keine Notwendigkeit ableiten es aus dem Passwort, auch, wie im Beispiel gezeigt, die Sie miteinander verknüpft.
Die IV ist die information der öffentlichkeit, das heißt, Sie können sicher veröffentlichen - aber es ist zwingend erforderlich, dass es unvorhersehbar bleibt und random - sonst sind Sie anfällig für einige dedizierten Angriffen, es sei denn, Sie sind mit einer Authentifizierten Verschlüsselungsmodus wie z.B. GCM.
Wenn Sie nicht vertraut mit diesen Themen und im Zweifel, ich würde empfehlen Ihnen dringend, konsultieren die Spezialisten. Wenn die zu sichernden Daten ist so wichtig wie Sie sagen, das zusätzliche Geld sollte gut angelegt ist. Wenn Sie nicht erfahren in dem Bereich, die Chancen sind einfach zu hoch, dass Sie möglicherweise übersehen, etwas wichtiges, wenn hand-crafting Ihre eigene Lösung.
Nichts ist für immer unmöglich, vor allem, wenn Sie mit einem schwachen IV oder Schlüssel. Aber es ist so statistisch unbedeutend, dass Sie sollten in der Lage sein, gut zu schlafen in der Nacht. Wenn Sie Fragen, ist, wenn andere Menschen verwenden diesen Algorithmus für mission-critical-Verschlüsselung, die Antwort ist definitiv ja.