파일에 쓰는 것과 일치하지 않으므로 문제가 간단합니다. 일부 텍스트를 암호화하고 그것을 배열의 바이트와 같은 File에 쓰고 싶습니다. File의 내용을 읽고 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;
}
는 문자열이 방법 Ecnrypt 바이트 배열은
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;
}
그럼 난 암호화 텍스트를 저장 한 후 버튼을
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