Размер увеличивается, если прочитанные байты зашифрованы.Длина буфера растет в поточном шифре
Как найти значение байтов, которое я прочитал, когда пытаюсь расшифровать.
Например:
BufferLengh: 8192
После шифрования: 8208
Разность 16 байт там не зафиксировано.
Как я могу сделать этот процесс стабильным я с нетерпением жду ваших различных решений и рекомендаций
Шифрование Функция:
using (FileStream TEMPFILE = new FileStream(FILE_FULL_NAME, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, BUFFER_SIZE, FileOptions.DeleteOnClose))
{
int BUFFER_SIZE=8192;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = FILE_ORGINAL.Read(buffer, 0, BUFFER_SIZE)) > 0)
{
byte[] cryp = EN_Crypto_AES(buffer);
//encryp lenth : 8208
//BUFFER_SIZE : 8192
//----------------------
//Crypto +16 byte
TEMPFILE.Write(cryp, 0, cryp.Length);
}
TEMPFILE.Position = 0;
TEMPFILE.CopyTo(FILE_ORGINAL);
}
дешифрования Функция
using (FileStream TEMPFILE = new FileStream(FILE_FULL_NAME, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, BUFFER_SIZE, FileOptions.DeleteOnClose))
{
int BUFFER_SIZE=8192;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = FILE_ORGINAL.Read(buffer, 0, BUFFER_SIZE)) > 0)
{
byte[] cryp = DE_Crypto_AES(buffer); //16 byte ?
TEMPFILE.Write(cryp, 0, cryp.Length);
}
TEMPFILE.Position = 0;
TEMPFILE.CopyTo(FILE_ORGINAL);
}
EDIT
Другой класс
byte[] passwordBytes;
public byte[] EN_Crypto_AES(byte[] bytesToBeEncrypted)
{
byte[] encryptedBytes = null;
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize/8);
AES.IV = key.GetBytes(AES.BlockSize/8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
cs.Close();
}
encryptedBytes = ms.ToArray();
}
}
return encryptedBytes;
}
public byte[] DE_Crypto_AES(byte[] bytesToBeDecrypted)
{
byte[] decryptedBytes = null;
// Set your salt here, change it to meet your flavor:
// The salt bytes must be at least 8 bytes.
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize/8);
AES.IV = key.GetBytes(AES.BlockSize/8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
cs.Close();
}
decryptedBytes = ms.ToArray();
}
}
return decryptedBytes;
}
Вам нужно будет опубликовать код для 'EN_Crypto_AES'. –