I'm using AESCryptoServiceProviderclass. I'm trying to test different CipherMode values.
When using OFBmode I get an exception: Invalid algorithm specified.
In the documentation the mode is documented:
AESCryptoServiceProvider Class http://msdn.microsoft.com/es-es/library/system.security.cryptography.aescryptoserviceprovider.aspx
CipherMode http://msdn.microsoft.com/es-es/library/system.security.cryptography.ciphermode.aspx
I also have read this similar post, but found no answer:
Does .NET support of AES OFB
My code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace V_ModosDeEncadenamiento
{
class Program
{
static void Main(string[] args)
{
//Clave de 128
byte[] claveAES128Bits = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
//Vector de inicialización
byte[] vectorInicializacion = { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF };
//Texto plano de prueba para codificar. Bloque de 16 bytes todos iguales
byte[] textoPlanoBloques16BytesIguales =
{0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF};
//Nombre del fichero en disco con texto cifrado
String nombreFicheroECB = "zz_TextoCifradoECB.bin";
String nombreFicheroCBC = "zz_TextoCifradoCBC.bin";
String nombreFicheroCFB = "zz_TextoCifradoCFB.bin";
String nombreFicheroOFB = "zz_TextoCifradoOFB.bin";
//Array con el texto descifrado
byte[] textoDescifrado = new byte[textoPlanoBloques16BytesIguales.Length];
AesCryptoServiceProvider aesCrypto = new AesCryptoServiceProvider();
FileStream fileWrite;
FileStream fileRead;
ICryptoTransform encryptor;
ICryptoTransform decryptor;
CryptoStream stream;
CryptoStream streamOut;
//Establecer valores
aesCrypto.KeySize = 128;
aesCrypto.Key = claveAES128Bits;
aesCrypto.IV = vectorInicializacion;
aesCrypto.Padding = PaddingMode.PKCS7;
aesCrypto.Mode = CipherMode.OFB;
fileWrite = new FileStream(nombreFicheroOFB, FileMode.Create, FileAccess.Write, FileShare.None);
encryptor = aesCrypto.CreateEncryptor();
stream = new CryptoStream(fileWrite, encryptor, CryptoStreamMode.Write);
// THE EXCEPTION HAPPENS HERE **************************************************
//******************************************************************************
stream.Write(textoPlanoBloques16BytesIguales, 0, textoPlanoBloques16BytesIguales.Length);
stream.Flush();
stream.Close();
stream.Dispose();
fileWrite.Close();
fileRead = new FileStream(nombreFicheroOFB, FileMode.Open, FileAccess.Read, FileShare.None);
decryptor = aesCrypto.CreateDecryptor();
streamOut = new CryptoStream(fileRead, decryptor, CryptoStreamMode.Read);
streamOut.Read(textoDescifrado, 0, textoDescifrado.Length);
streamOut.Flush();
streamOut.Close();
streamOut.Dispose();
fileRead.Close();
//Mostrar datos descifrados
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Cifrado modo EFB.");
Console.WriteLine("Datos descifrados:");
for (int i = 0; i <= textoDescifrado.Length - 1; i++)
{
if (((i % 8) == 0) && (i != 0)) Console.WriteLine(); //8 bytes en cada linea
Console.Write(" {0:X2}", textoDescifrado[i]);
}
Check this article: http://social.msdn.microsoft.com/Forums/is/netfxbcl/thread/891955cd-3125-487c-9746-9fd07f24b12f
RijndaelManaged doesn't support OFB mode at the moment. You can code (almost easily) OFB mode yourself, atop of ECB mode, or use side cryptography libraries, like BouncyCastle, SecureBlackbox, whatever else.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With