【发布时间】:2017-06-14 17:19:39
【问题描述】:
如果我读取的字节被加密,大小会增加。
当我尝试解密时如何找到我读取的字节的值。
例如:
缓冲区长度: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);
}
编辑
另一个类
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的代码。
标签: c# encryption stream buffer