我正在使用AESCryptoServiceProvider
類。我試圖測試不同的CipherMode
值。在.NET中是否支持OFB cipherMode?
當使用OFB
模式時,我收到一個異常:指定了無效的算法。
在文檔的方式記載:
AESCryptoServiceProvider類 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
我也看過這個類似的帖子,也未找到答案:
我的代碼:
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]);
}