locked
“Invalid algorithm specified” when using AES with OFB cipher mode (VB.NET) RRS feed

  • Question

  • I have to use AES encryption with OFB cipher mode , I use VB.NET 4.5 ,windows 8 and the following code:

       Public Function DoEncryption(ByVal KeyArray() As Byte, ByVal IVArray() As Byte, ByVal Buffer As String) As Byte()
        Dim encrypted() As Byte
        Using a As Aes = Aes.Create()
            a.Mode = CipherMode.OFB
    
            Dim encryptor As ICryptoTransform
            encryptor = a.CreateEncryptor(KeyArray, IVArray)
    
    
            ' Create the streams used for encryption. 
            Using msEncrypt As New MemoryStream()
                Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
                    Using swEncrypt As New StreamWriter(csEncrypt)
    
                        'Write all data to the stream.
                        swEncrypt.Write(Buffer)
                    End Using
                    encrypted = msEncrypt.ToArray()
                End Using
            End Using
        End Using
    
        Return encrypted
    
    End Function

    I have an error "Invalid algorithm specified" at

      swEncrypt.Write(Buffer)

    any suggestions? Does .NET support OFB cipher mode?

    Note: I use a code similar to the sample code here :

    https://msdn.microsoft.com/en-us/library/system.security.cryptography.aes%28v=vs.110%29.aspx

     


    wadea asad

    Sunday, May 31, 2015 6:10 PM

Answers

  • Yes it works using BouncyCastle , my new code after install BouncyCastle using Nuget is:

    Imports System.Security.Cryptography
    Imports System.IO
    Imports Org.BouncyCastle.Crypto
    Imports Org.BouncyCastle.Security
    Imports Org.BouncyCastle.Crypto.Parameters
    Public Class EncryptionFunction
    Public Function DoEncryption(ByVal KeyArray() As Byte, ByVal IVArray() As Byte, ByVal Buffer As Byte()) As Byte()
    
            Dim ae As New CipherKeyGenerator()
            ae.Init(New KeyGenerationParameters(New SecureRandom(), 256))
            Dim aesKeyParam As KeyParameter = ParameterUtilities.CreateKeyParameter("AES", KeyArray)
            Dim aesIVKeyParam As ParametersWithIV = New ParametersWithIV(aesKeyParam, IVArray)
            Dim cipher As IBufferedCipher = CipherUtilities.GetCipher("AES/OFB/NoPadding")
            cipher.Init(True, aesIVKeyParam)
            Dim encrypted() As Byte = cipher.DoFinal(Buffer)
    
    
            Return encrypted
    
        End Function
    End Class

    Thank you :)


    wadea asad

    • Marked as answer by hijjawi Monday, June 1, 2015 8:57 PM
    Monday, June 1, 2015 8:57 PM