私は、他のファイル(ie .exe、.jpg、.imgなど)を読み込み、bytes[]
トラフFile.ReadAllBytes()
に転送し、3DESで暗号化して保存しますFile.WriteAllBytes()
となります。同じ逆を行う方法を解読するよりも。私の問題は、メモリの例外を抱えているよりも300MBのオリジナルファイルがすべて正常に動作していることです。任意の提案どのようにこの問題を解決するには? 1GBを超えるファイルを扱うには?それはstreamreaderまたはcryptostreamリーダーと作家をむしろ使用するのを助けることができますか?File.ReadAllBytes()メモリ不足例外
リーディングと暗号化ファイル:
try
{
saveFileDialog1.FileName = "";
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
fileToEncrypt = File.ReadAllBytes(openFileDialog1.FileName);
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(textBox1.Text));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(fileToEncrypt, 0, fileToEncrypt.Length);
saveFileDialog1.FileName = openFileDialog1.SafeFileName;
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
File.WriteAllBytes(saveFileDialog1.FileName, Results);
}
TDESAlgorithm.Clear();
HashProvider.Clear();
}
}
catch
{
MessageBox.Show("Your system has not enough memory.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
復号化と保存:
try
{
openFileDialog1.FileName = "";
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK) // Test result.
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
fileToDecrypt = File.ReadAllBytes(openFileDialog1.FileName);
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(textBox1.Text));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(fileToDecrypt, 0, fileToDecrypt.Length);
saveFileDialog1.FileName = Path.GetFileName(openFileDialog1.FileName);
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
File.WriteAllBytes(saveFileDialog1.FileName, Results);
}
TDESAlgorithm.Clear();
HashProvider.Clear();
}
}
catch
{
MessageBox.Show("Master password is wrong", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
私は唯一の趣味コーダだので、私は自分のコード:)
textbox1.Text
があるといくつかの慈悲のために祈りますマスターパスワード。
'FileStream'を暗号化メソッド – Magnus
に渡すだけで、ファイルをメモリに読み込まないでください。ここでは、暗号化プロバイダもストリームであると想定しています。そうではありません、それは単にバイトを変換するアルゴリズムです。あなたはCrytoStreamクラスを使用しませんでした。 MSDNの例に従ってください:http://msdn.microsoft.com/en-us/library/system.security.cryptography.tripledescryptoserviceprovider.aspx –
すべての例外をキャッチしているようです。それがOutOfMemoryExceptionであることをどのように確かめることができますか? –