に書き込むのと矛盾するので、問題は簡単です。私はいくつかのテキストを暗号化し、配列のバイトのようなファイルに書き込みたいと私はファイルの内容を読む必要がありますし、文字列に配列のバイトを解読する別のメソッドにparametrのようになります。 メソッド暗号化と復号化は正常に動作しますが、FILEのバイト配列を使用すると例外がスローされます。バイト配列の読み込みは、バイト配列をファイル
private static byte[] EncryptString(string text,byte[] key,byte[] vektor)
{
byte[] array=null;
// Check arguments.
if (text == null || text.Length <= 0)
throw new ArgumentNullException("plainText");
if (key == null || key.Length <= 0)
throw new ArgumentNullException("Key");
if (vektor == null || vektor.Length <= 0)
throw new ArgumentNullException("Vektor");
try
{
using (DESCryptoServiceProvider provider = new DESCryptoServiceProvider())
{
provider.Key = key;
provider.IV = vektor;
using (MemoryStream memory = new MemoryStream())
{
using (CryptoStream crypto = new CryptoStream(memory, provider.CreateEncryptor(provider.Key, provider.IV), CryptoStreamMode.Write))
{
using (StreamWriter writer = new StreamWriter(crypto))
{
writer.WriteLine(text);
}
}
array = memory.ToArray();
}
}
}
catch (ArgumentNullException e)
{
Console.WriteLine("Error in EncryptString {0}", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Error in EncryptString {0}", e.Message);
}
return array;
}
文字列
private static string DecryptByte(byte[] text, byte[] key, byte[] vektor)
{
string result = null;
// Check arguments.
if (text == null || text.Length <= 0)
throw new ArgumentNullException("plainText");
if (key == null || key.Length <= 0)
throw new ArgumentNullException("Key");
if (vektor == null || vektor.Length <= 0)
throw new ArgumentNullException("Key");
try
{
using (DESCryptoServiceProvider provider = new DESCryptoServiceProvider())
{
provider.Key=key;
provider.IV=vektor;
using (MemoryStream memory = new MemoryStream(text))
{
using (CryptoStream crypto = new CryptoStream(memory, provider.CreateDecryptor(provider.Key, provider.IV), CryptoStreamMode.Read))
{
using (StreamReader read = new StreamReader(crypto))
{
result=read.ReadToEnd();
}
}
}
}
}
catch(Exception e)
{
Console.WriteLine("Error in DecryptByte:{0}"+e.Message);
}
return result;
}
この方法Ecnryptバイト配列まあ、私は暗号化テキストを保存して、ボタンが
private void buttonDecrypt_Click(object sender, RoutedEventArgs e)
{
byte[] text=null,helper=null;
string result = null;
try
{
using (FileStream filestream = File.OpenRead(path))
{
helper = new byte[filestream.Length];
filestream.Read(helper, 0, (int)filestream.Length);
}
using (DESCryptoServiceProvider provider = new DESCryptoServiceProvider())
{
result = DecryptByte(helper, provider.Key, provider.IV);
}
}
catch(Exception ex)
{
Console.WriteLine("Error v ButtonDecrypt.{0}_____{1}",ex.Message,ex.Data);
}
}
を押されたときにそのように私の問題は、私からの読み取り、そのデータでありますファイルは同じではなく、DecryptByte例外がスローされます。私たちを手伝ってくれますか? EDIT yeah例外メッセージが無効です。
(ももちろん解読に必要な)暗号化されたバイト数で正しいブロックサイズを確保する何(正確に)例外だし、コードのどの行がそれを投げていますか?また、あなたのコードはちょっと混乱しています。実際には、GUIとは別に独自のメソッドに読み書きコードを抽出する必要があります。責任を分かち合うためにコードをリファクタリングすれば、この種の問題をデバッグするのに多くの手助けができます。 – tomfanning
例外の内容を教えてください。 –
私は賭けました!パディングは無効で、削除することはできません! – Steve