Я использую C# в приложении формы Windows Visual Studio для написания программы, которая может шифровать и дешифровать файлы. Я следую этому пошаговому руководству: https://msdn.microsoft.com/en-US/library/Aa964697(v=VS.85).aspx и все выполнено с некоторыми незначительными изменениями, внесенными в мою среду и настройки.FileNotFoundException при использовании FileStream для шифрования
Когда я пытаюсь зашифровать файл, мне придается ошибка «FileNotFoundException была необработанной», когда программа пытается использовать файл для шифрования файла. Все, что до этого момента, похоже, работает.
Вот код для метода EncryptFile:
private void EncryptFile(string inFile)
{
// Create an instance of Rijndael for symmetric encryption of the data.
RijndaelManaged rjndl = new RijndaelManaged();
rjndl.KeySize = 256;
rjndl.BlockSize = 256;
rjndl.Mode = CipherMode.CBC;
ICryptoTransform transform = rjndl.CreateEncryptor();
// Use RSACryptoServiceProvider to enrypt the Rijndael key.
byte[] keyEncrypted = rsa.Encrypt(rjndl.Key, false);
// Create byte arrays to contain the length values of the key and IV.
byte[] LenK = new byte[4];
byte[] LenIV = new byte[4];
int lKey = keyEncrypted.Length;
LenK = BitConverter.GetBytes(lKey);
int lIV = rjndl.IV.Length;
LenIV = BitConverter.GetBytes(lIV);
// Write the following to the FileStream for the encrypted file (outFs):
// - length of the key
// - length of the IV
// - ecrypted key
// - the IV
// - the encrypted cipher content
// Change the file's extension to ".enc"
string outFile = EncrFolder + inFile.Substring(0, inFile.LastIndexOf(".")) + ".enc";
using (FileStream outFs = new FileStream(outFile, FileMode.Create))
{
outFs.Write(LenK, 0, 4);
outFs.Write(LenIV, 0, 4);
outFs.Write(keyEncrypted, 0, lKey);
outFs.Write(rjndl.IV, 0, lIV);
// Now write the cipher text using a CryptoStream for encrypting.
using (CryptoStream outStreamEncrypted = new CryptoStream(outFs, transform, CryptoStreamMode.Write))
{
// By encrypting a chunk at a time, you can save memory and accommodate large files.
int count = 0;
int offset = 0;
// blockSizeBytes can be any arbitrary size.
int blockSizeBytes = rjndl.BlockSize/8;
byte[] data = new byte[blockSizeBytes];
int bytesRead = 0;
using (FileStream inFs = new FileStream(inFile, FileMode.Open))
{
do
{
count = inFs.Read(data, 0, blockSizeBytes);
offset += count;
outStreamEncrypted.Write(data, 0, count);
bytesRead += blockSizeBytes;
}
while (count > 0);
inFs.Close();
}
outStreamEncrypted.FlushFinalBlock();
outStreamEncrypted.Close();
}
outFs.Close();
}
}
ошибка происходит на линии "используя (FileStream inFs = новый FileStream (входной_файл, FileMode.Open))". Вот изображение ошибки:
Что вызывает ошибку, и что такое исправление?
Я подозреваю, что проблема в том, что файл не был найден. Что таинственно? –
Кроме того, при представлении исключений всегда публикуйте полное исключение, включая любые внутренние исключения. Только для устранения неполадок поймайте исключение (возможно, на верхнем уровне вашего метода), затем опубликуйте результат 'ex.ToString()'. –
Прости меня, я новичок во всем этом. Я думаю, что моя проблема кажется простой, но я новичок в программировании и на этом сайте, поэтому у меня нет лучшего понимания всего. Когда я выбираю файл для шифрования, почему программа ищет файл в другом месте? Как у меня есть файл, в котором ожидается, что он будет просто выбрать файл, который будет использоваться из openfiledialog? –