Rijndael的文件加密問題Rijndael的文件加密問題
我要加密使用Rijndael算法大型文件,但我走出內存異常錯誤的。任何想法? 這裏是我的代碼
public void Rijndael_EncryptFile(string password, string filepath, int opt)
{
try
{
byte[] keyBytes;
keyBytes = Encoding.Unicode.GetBytes(password);
Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, keyBytes);
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.BlockSize = opt; //128 256
rijndaelCSP.KeySize = opt; //128 256
rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize/8);
rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize/8);
rijndaelCSP.Mode = CipherMode.CFB;
rijndaelCSP.Padding = PaddingMode.Zeros;
ICryptoTransform encryptor = rijndaelCSP.CreateEncryptor();
FileStream inputFileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read);
byte[] inputFileData = new byte[(int)inputFileStream.Length];
inputFileStream.Read(inputFileData, 0, (int)inputFileStream.Length);
FileStream outputFileStream = new FileStream(filepath + ".enc", FileMode.Create, FileAccess.Write);
CryptoStream encryptStream = new CryptoStream(outputFileStream, encryptor, CryptoStreamMode.Write);
encryptStream.Write(inputFileData, 0, (int)inputFileStream.Length);
encryptStream.FlushFinalBlock();
rijndaelCSP.Clear();
encryptStream.Close();
inputFileStream.Close();
outputFileStream.Close();
}
}
對於CFB模式,IV必須*唯一*。不要使用靜態IV,因爲這會使密碼具有確定性,因此在語義上不安全。觀察密文的攻擊者可以確定何時之前發送了相同的消息前綴。對於像CFB這樣的流式傳輸模式,甚至更糟糕的是,即使消息不同時,攻擊者甚至能夠推斷出消息IV是否被重用。 IV不是祕密的,所以你可以把它和密文一起發送。通常,它只是在密文前面加上,然後在解密之前切掉。 –