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는 비밀이 아니므로 암호문과 함께 보낼 수 있습니다. 대개 암호문 앞에 붙이고 암호 해독 전에 잘라냅니다. –