Шифрование файлов на флешке - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

как программно зашифровать файлы ? есть флешка , на ней месседжер (клиент) нужно что бы программа зашифровала к чертям файлы на ней или как то заблокировала доступ к флешке , и разрешала доступ к флешке (или файлам) только после ввода пароля в этой же программе? я вроде все рублю и по поводу пароля реализовать могу ... интересно только шифрование , мож завалялся у кого то код что шифрует фалы...не важно как ...там глвное продемонстрироват процесс шифрования =)

Решение задачи: «Шифрование файлов на флешке»

textual
Листинг программы
NotInheritable Class RijndaelHelper
 
    Private Sub New()
    End Sub
    
    Public Shared Sub EncryptFile(filePath As String, password As String)
        Dim rijndael As RijndaelManaged = Nothing, _
            inStream As FileStream = Nothing, _
            tmpStream As FileStream = Nothing, _
            cryptStream As CryptoStream = Nothing
        Try
            rijndael = GetRijndaelManaged(password)
            inStream = File.OpenRead(filePath)
            Dim tmpPath As String = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() & ".tmp")
            tmpStream = New FileStream(tmpPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.DeleteOnClose)
            cryptStream = New CryptoStream(tmpStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)
            inStream.CopyTo(cryptStream)
            cryptStream.FlushFinalBlock()
            inStream.Close()
 
            tmpStream.Position = 0
            Using outStream As New FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)
                tmpStream.CopyTo(outStream)
            End Using
        Finally
            If tmpStream IsNot Nothing Then tmpStream.Close()
            If cryptStream IsNot Nothing Then cryptStream.Close()
            If inStream IsNot Nothing Then inStream.Close()
            If rijndael IsNot Nothing Then rijndael.Dispose()
        End Try
    End Sub
 
    Public Shared Sub DecryptFile(filePath As String, password As String)
        Using rijndael As RijndaelManaged = GetRijndaelManaged(password)
            Dim tmpPath As String = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() & ".tmp")
            Using tmpStream As New FileStream(tmpPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.DeleteOnClose)
                Using inStream As FileStream = File.OpenRead(filePath)
                    Using cryptStream As New CryptoStream(inStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read)
                        cryptStream.CopyTo(tmpStream)
                    End Using
                End Using
                
                tmpStream.Position = 0
                Using outStream As New FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)
                    tmpStream.CopyTo(outStream)
                End Using
            End Using
        End Using
    End Sub
    
    Shared Function GetRijndaelManaged(password As String) As RijndaelManaged
        Dim rijndael As New RijndaelManaged
        Dim salt() As Byte = {87, 79, 33, 13, 167, 124, 225, 79, 190, 102, 218, 228, 91, 128, 101, 62, 68, 70, 144, 191, 219, 103, 208, 185, 228, 95, 91}
        Using deriveBytes As New Rfc2898DeriveBytes(Encoding.Unicode.GetBytes(password), salt, 3961)
            rijndael.Key = deriveBytes.GetBytes(rijndael.KeySize\8)
            rijndael.IV = deriveBytes.GetBytes(rijndael.BlockSize\8)
        End Using
        Return rijndael
    End Function
 
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5