Search code examples
vb.netrijndael

vb.net rijndael limit to 64 character


i have problem while encrypt and decrypt using rijndael in vb.net.

it cannot work on string more than 64 character. here is my code:

 Private Function prepareRijn() As Rijndael
    Dim KEY As String = Left(_KEY, 32)
    Dim IV As String = Right(_KEY, 32)
    Dim enc As New System.Text.UTF8Encoding
    Dim byteKEY() As Byte = enc.GetBytes(KEY)
    Dim byteIV() As Byte = enc.GetBytes(IV)
    Dim alg As Rijndael = Rijndael.Create
    alg.BlockSize = 256
    alg.KeySize = 256
    alg.Padding = PaddingMode.Zeros
    alg.Mode = CipherMode.CBC
    alg.Key = byteKEY
    alg.IV = byteIV
    Return alg
End Function
Function decrypt(ByVal encrypted As String) As String
    encrypted = encrypted.Replace("Q2FrZQ==.", "")
    Dim enc As New System.Text.UTF8Encoding
    Dim alg As Rijndael = prepareRijn()
    Dim ms As New MemoryStream
    Dim cs As CryptoStream = New CryptoStream(ms, alg.CreateDecryptor, CryptoStreamMode.Write)
    Dim data() As Byte = Convert.FromBase64String(encrypted)
    cs.Write(data, 0, data.Length)
    'ms.SetLength(data.Length)
    Dim decrypted() As Byte
    decrypted = ms.ToArray
    cs.Close()

    Return enc.GetString(decrypted)
End Function
Function encrypt(ByVal decrypt As String) As String
    decrypt = decrypt + "                "
    Dim alg As Rijndael = prepareRijn()
    Dim ms As New MemoryStream()
    Dim cs As CryptoStream = New CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write)
    Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(decrypt)
    cs.Write(data, 0, data.Length)
    'ms.SetLength(data.Length)
    Dim encrypted() As Byte = ms.ToArray()
    cs.Close()
    Return Convert.ToBase64String(encrypted)
End Function

is there anything i miss during my rijndael configuration ?


Solution

  • I wrote complete Encryption Class for you. It works perfectly. It can be used for Both Strings and ByteArrays. This Class returns Encrypted Data in Base64, if you dont want Base64, just remove Conversion.

    Imports System.Text
    Imports System.Security.Cryptography
    Imports System.IO
    Imports System
    
    Public Class Encryption
    
        ' Fields
        Private Shared sIV As String = "Your IV Key Placed Here 32-Bytes"
        Private Shared sKey As String = "Your SecKey Placed Here 32-Bytes"
    
        ' Methods
        Public Shared Function DecryptRJ256(ByVal prm_text_to_decrypt As String) As String
            Dim s As String = prm_text_to_decrypt
            Dim managed As New RijndaelManaged With { _
                .Padding = PaddingMode.Zeros, _
                .Mode = CipherMode.ECB, _
                .KeySize = &H100, _
                .BlockSize = &H100 _
            }
            Dim rgbKey As Byte() = Nothing
            Dim rgbIV As Byte() = Nothing
            s = s.Replace("-", "+").Replace("_", "/").Replace("|", "=")
            rgbKey = Encoding.ASCII.GetBytes(Encryption.sKey)
            rgbIV = Encoding.ASCII.GetBytes(Encryption.sIV)
            Dim transform As ICryptoTransform = managed.CreateDecryptor(rgbKey, rgbIV)
            Dim buffer As Byte() = Convert.FromBase64String(s)
            Dim buffer4 As Byte() = New Byte((buffer.Length + 1) - 1) {}
            Dim stream As New MemoryStream(buffer)
            Dim stream2 As New CryptoStream(stream, transform, CryptoStreamMode.Read)
            stream2.Read(buffer4, 0, buffer4.Length)
            Return Encoding.ASCII.GetString(buffer4)
        End Function
    
        Public Shared Function EncryptRJ256(ByVal prm_text_to_encrypt As String) As String
            Dim s As String = prm_text_to_encrypt
            Dim managed As New RijndaelManaged With { _
                .Padding = PaddingMode.Zeros, _
                .Mode = CipherMode.ECB, _
                .KeySize = &H100, _
                .BlockSize = &H100 _
            }
            Dim buffer As Byte() = Nothing
            Dim rgbKey As Byte() = Nothing
            Dim rgbIV As Byte() = Nothing
            rgbKey = Encoding.ASCII.GetBytes(Encryption.sKey)
            rgbIV = Encoding.ASCII.GetBytes(Encryption.sIV)
            Dim transform As ICryptoTransform = managed.CreateEncryptor(rgbKey, rgbIV)
            Dim stream As New MemoryStream
            Dim stream2 As New CryptoStream(stream, transform, CryptoStreamMode.Write)
            buffer = Encoding.ASCII.GetBytes(s)
            stream2.Write(buffer, 0, buffer.Length)
            stream2.FlushFinalBlock()
            Return Convert.ToBase64String(stream.ToArray).Replace("+", "-").Replace("/", "_").Replace("=", "|")
        End Function
    
        Public Shared Function EncryptRJ256(ByVal ArrayByte As Byte()) As String
    
            Dim managed As New RijndaelManaged With { _
                .Padding = PaddingMode.Zeros, _
                .Mode = CipherMode.ECB, _
                .KeySize = &H100, _
                .BlockSize = &H100 _
            }
    
            Dim rgbKey As Byte() = Nothing
            Dim rgbIV As Byte() = Nothing
            rgbKey = Encoding.ASCII.GetBytes(Encryption.sKey)
            rgbIV = Encoding.ASCII.GetBytes(Encryption.sIV)
            Dim transform As ICryptoTransform = managed.CreateEncryptor(rgbKey, rgbIV)
            Dim stream As New MemoryStream
            Dim stream2 As New CryptoStream(stream, transform, CryptoStreamMode.Write)
    
            stream2.Write(ArrayByte, 0, ArrayByte.Length)
            stream2.FlushFinalBlock()
            Return Convert.ToBase64String(stream.ToArray).Replace("+", "-").Replace("/", "_").Replace("=", "|")
    
        End Function
    
        Public Shared Function getMD5Hash(ByVal input As String) As String
            Dim md As MD5 = MD5.Create
            Dim bytes As Byte() = Encoding.ASCII.GetBytes(input)
            Dim buffer2 As Byte() = md.ComputeHash(bytes)
            Dim builder As New StringBuilder
            Dim i As Integer
            For i = 0 To buffer2.Length - 1
                builder.Append(buffer2(i).ToString("X2"))
            Next i
            Return builder.ToString
        End Function
    
        Public Shared Function FromBase64String(ByVal prm_text_to_decrypt As String) As String
    
            Dim s As String = prm_text_to_decrypt
    
            s = s.Replace("-", "+").Replace("_", "/").Replace("|", "=")
    
    
            Dim buffer As Byte() = Convert.FromBase64String(s)
            Return Encoding.ASCII.GetString(buffer)
    
        End Function
    
    End Class