VB.NET School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become a VB.NET Expert!

Join 300,308 VB.NET Programmers for FREE! Get instant access to thousands of VB.NET experts, tutorials, code snippets, and more! There are 2,101 people online right now. Registration is fast and FREE... Join Now!




Encryption/Decryption with RijndaelManaged

 

Encryption/Decryption with RijndaelManaged

chrixko

28 May, 2009 - 08:05 AM
Post #1

New D.I.C Head
*

Joined: 25 Nov, 2008
Posts: 48



Thanked: 7 times
My Contributions
Hi @ all smile.gif

I have a Problem to Decrypt my crypted files :
e.g. if I encrypt this text:
CODE

BÖAR BÖLASDJASPDJAPSDJPASDJPASD
asdj
...


And Decrypt it:
CODE

AB0_í-M3‚Sþr¯WPJAPSDJPASDJPASD
asdj
...

The first chars are wrong! blink.gif



My Code to Encrypt and Decrypt :
Encrypt:
CODE

  Public Shared Sub EncryptFile(ByVal sSource As String, ByVal sTarget As String, Optional ByVal BufferSize As Long = 4096)
        Dim ErrorHappened As Boolean = False
        Dim OldFileStream As FileStream
        Dim NewFileStream As FileStream
        Dim CrypStream As CryptoStream
    Try
        Dim key As String = "mypw"
        Dim skey() As Byte = SecurityFunctions.GetPasswordHashInBytes(key)


         OldFileStream = New FileStream(sSource, FileMode.Open)
         NewFileStream = New FileStream(sTarget, FileMode.Create)
        Dim RijndaelManaged As New RijndaelManaged

        RijndaelManaged.Key = skey
        RijndaelManaged.GenerateIV()


          CrypStream = New CryptoStream(NewFileStream, RijndaelManaged.CreateEncryptor(skey, RijndaelManaged.IV), CryptoStreamMode.Write)
        Dim Data(BufferSize) As Byte
        Dim Buffer As Long
        Dim BufferCount As Long
        Dim FileLen As Long = OldFileStream.Length

        Do
            If BufferCount >= FileLen - BufferSize Then
                ReDim Data(FileLen - BufferCount)
                Buffer = OldFileStream.Read(Data, 0, FileLen - BufferCount)
                CrypStream.Write(Data, 0, Buffer)
                Exit Do
            End If

            Buffer = OldFileStream.Read(Data, 0, BufferSize)
            CrypStream.Write(Data, 0, BufferSize)
            BufferCount += Buffer
        Loop


        CrypStream.Close()

    Catch ex As Exception
        MsgBox("Error!" & vbCrLf & ex.Message)
        ErrorHappened = True
    Finally
      NewFileStream.Close()
      OldFileStream.Close()
    End Try
    If ErrorHappened Then
      My.Computer.FileSystem.DeleteFile(sTarget)
    End If
  End Sub


Decrypt:
CODE

    Public Shared Sub DecryptFile(ByVal sSource As String, ByVal sTarget As String, Optional ByVal BufferSize As Long = 4096)
        Dim ErrorHappened As Boolean = False
        Dim OldFileStream As FileStream
        Dim NewFileStream As FileStream
        Dim CrypStream As CryptoStream
    Try


        Dim key As String = "mypw"
        Dim skey() As Byte = SecurityFunctions.GetPasswordHashInBytes(key)

        OldFileStream = New FileStream(sSource, FileMode.Open)
        NewFileStream = New FileStream(sTarget, FileMode.Create)
        Dim RijndaelManaged As New RijndaelManaged()


        RijndaelManaged.Key = skey
        RijndaelManaged.GenerateIV()

        CrypStream = New CryptoStream(OldFileStream, RijndaelManaged.CreateDecryptor(skey, RijndaelManaged.IV), CryptoStreamMode.Read)

        Dim Data(BufferSize) As Byte
        Dim Buffer As Long
        Dim BufferCount As Long
        Dim FileLen As Long = OldFileStream.Length

        Do
            If BufferCount >= FileLen - BufferSize Then
                ReDim Data(FileLen - BufferCount)
                Buffer = CrypStream.Read(Data, 0, FileLen - BufferCount)
                NewFileStream.Write(Data, 0, Buffer)
                Exit Do
            End If

            Buffer = CrypStream.Read(Data, 0, BufferSize)
            NewFileStream.Write(Data, 0, BufferSize)

            BufferCount += Buffer
        Loop
        CrypStream.Close()
    Catch ex As Exception

        MsgBox("Error!" & vbCrLf & ex.Message)
        ErrorHappened = True
    Finally
        NewFileStream.Close()
        OldFileStream.Close()
    End Try
    If ErrorHappened Then
      My.Computer.FileSystem.DeleteFile(sTarget)
    End If
  End Sub


Someone an Idea ?

Thanks wink2.gif

This post has been edited by chrixko: 28 May, 2009 - 08:36 AM

User is offlineProfile CardPM
+Quote Post


chrixko

RE: Encryption/Decryption With RijndaelManaged

28 May, 2009 - 11:22 AM
Post #2

New D.I.C Head
*

Joined: 25 Nov, 2008
Posts: 48



Thanked: 7 times
My Contributions
Ok, changed the code and this problem is solved.
But now chars like "§" and "ÄÖÜ" are saved as "?" or these little rectangles
What I should do now ?

My new code :

CODE

  Private Shared Rijndael As New RijndaelManaged()

  Public Shared Sub Encrypt(ByVal Source As String, ByVal Destination As String)
    Dim content As String
    Rijndael.Key = SecurityFunctions.GetPasswordHashInBytes("mypw")

    Dim Transform As ICryptoTransform = Rijndael.CreateEncryptor()
    Dim fs As New FileStream(Destination, FileMode.Create)
    fs.Write(Rijndael.IV, 0, Rijndael.IV.Length)
    Dim cs As New CryptoStream(fs, Transform, CryptoStreamMode.Write)

    Dim w As New StreamWriter(cs)
    Dim sr As New StreamReader(Source)
    content = sr.ReadToEnd
    w.Write(content)
    w.Flush()
    sr.Close()
    cs.FlushFinalBlock()
    w.Close()
    Array.Clear(Rijndael.Key, 0, Rijndael.Key.Length)
  End Sub

  Public Shared Sub Decrypt(ByVal Source As String, ByVal Destination As String)
    Dim content As String
    Dim fs As New FileStream(Source, FileMode.Open)

    Dim iv() As Byte
    ReDim iv(Rijndael.IV.Length - 1)
    fs.Read(iv, 0, iv.Length)
    Rijndael.IV = iv

    Dim transform As ICryptoTransform = Rijndael.CreateDecryptor(SecurityFunctions.GetPasswordHashInBytes("mypw"), Rijndael.IV)

    Dim cs As New CryptoStream(fs, transform, CryptoStreamMode.Read)

    Dim r As New StreamReader(cs)
    content = r.ReadToEnd
    r.Close()
    Dim sw As New StreamWriter(Destination)
    sw.Write(content)
    sw.Close()
  End Sub

User is offlineProfile CardPM
+Quote Post

Fast ReplyReply to this topicStart new topic

Time is now: 11/7/09 01:48PM

Live VB.NET Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

VB.NET Tutorials

Reference Sheets

VB.NET Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month