Algoritmo encriptado rijndael-256 en .net VB con modo de cifrado ECB

By | 14/12/2015

Advanced Encryption Standard (AES), también conocido como Rijndael (pronunciado “Rain Doll” en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica.

El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre “Rijndael”.

Rijndael fue un refinamiento de un diseño anterior de Daemen y Rijmen, Square; Square fue a su vez un desarrollo de Shark.

Al contrario que su predecesor DES, Rijndael es una red de sustitución-permutación, no una red de Feistel. AES es rápido tanto en software como en hardware, es relativamente fácil de implementar, y requiere poca memoria. Como nuevo estándar de cifrado, se está utilizando actualmente a gran escala.

 

Ejemplo de encriptado:

Dim encriptado as string  = EncryptString128Bit(DatoAEncriptar, Clave)

Imports System.IO
Imports System.Security.Cryptography
 
   Public Function EncryptString128Bit(ByVal vstrTextToBeEncrypted As String, _
                               ByVal vstrEncryptionKey As String) As String
      Dim bytValue() As Byte
      Dim bytKey() As Byte
      Dim bytEncoded() As Byte
      Dim bytIV() As Byte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
      Dim intLength As Integer
      Dim objMemoryStream As New MemoryStream()
      Dim objCryptoStream As CryptoStream
      Dim objRijndaelManaged As RijndaelManaged
 
 
      '   **********************************************************************
      '   ******  Strip any null character from string to be encrypted    ******
      '   **********************************************************************

      vstrTextToBeEncrypted = StripNullCharacters(vstrTextToBeEncrypted)
 
      '   **********************************************************************
      '   ******  Value must be within ASCII range (i.e., no DBCS chars)  ******
      '   **********************************************************************
      bytValue = Encoding.UTF8.GetBytes(vstrTextToBeEncrypted.ToCharArray)
 
      intLength = Len(vstrEncryptionKey)
 
      '   ********************************************************************
      '   ******   Encryption Key must be 256 bits long (32 bytes)      ******
      '   ******   If it is longer than 32 bytes it will be truncated.  ******
      '   ******   If it is shorter than 32 bytes it will be padded     ******
      '   ******   with upper-case Xs.                                  ****** 
      '   ********************************************************************

      bytKey = Encoding.UTF8.GetBytes(vstrEncryptionKey.ToCharArray)
 
      objRijndaelManaged = New RijndaelManaged()
 
      objRijndaelManaged.Mode = CipherMode.ECB
      'rijAlg.KeySize = 256
      objRijndaelManaged.BlockSize = 256
      objRijndaelManaged.Padding = PaddingMode.Zeros
      '   ***********************************************************************
      '   ******  Create the encryptor and write value to it after it is   ******
      '   ******  converted into a byte array                              ******
      '   ***********************************************************************

      Try
 
         objCryptoStream = New CryptoStream(objMemoryStream, _
           objRijndaelManaged.CreateEncryptor(bytKey, bytIV), _
           CryptoStreamMode.Write)
         objCryptoStream.Write(bytValue, 0, bytValue.Length)
 
         objCryptoStream.FlushFinalBlock()
 
         bytEncoded = objMemoryStream.ToArray
         objMemoryStream.Close()
         objCryptoStream.Close()
      Catch
 
 
 
      End Try
 
      '   ***********************************************************************
      '   ******   Return encryptes value (converted from  byte Array to   ******
      '   ******   a base64 string).  Base64 is MIME encoding)             ******
      '   ***********************************************************************

      Return Convert.ToBase64String(bytEncoded)
 
   End Function
 
   Public Function StripNullCharacters(ByVal vstrStringWithNulls As String) As String
 
      Dim intPosition As Integer
      Dim strStringWithOutNulls As String
 
      intPosition = 1
      strStringWithOutNulls = vstrStringWithNulls
 
      Do While intPosition > 0
         intPosition = InStr(intPosition, vstrStringWithNulls, vbNullChar)
 
         If intPosition > 0 Then
            strStringWithOutNulls = Left$(strStringWithOutNulls, intPosition - 1) & _
                              Right$(strStringWithOutNulls, Len(strStringWithOutNulls) - intPosition)
         End If
 
         If intPosition > strStringWithOutNulls.Length Then
            Exit Do
         End If
      Loop
 
      Return strStringWithOutNulls
 
   End Function