Wednesday, October 10, 2012

Цитата marshal64: Есть же простые методы: Пожалуй, это действительно business books более простые и


C# увы знаю поверхностно, однако возникла потребность написать программу шифратор и программу дешифратор.Несколько дней я пытаюсь адаптировать код так, что бы записывать зашифрованное сообщение в файл и расшифровывать его из соответствующего файла программой дешифратором, однако ничего стоящего не получается. Возможно кто-нибудь подскажет как практически реализовать подобную задачу? В качестве пособия я использовал эти исходники: http://www.gotdotnet.ru/files/107/ business books Код дешифратора business books я написал следующий: Код C# sing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Security.Cryptography; using GOST; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object

sender, EventArgs e) { byte[] plain_text = new Byte[512]; System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); string keyfile = File.ReadAllText("H:\\Keyset.kps"); string keypassword = File.ReadAllText("H:\\PASSWORD.kps"); byte[] key = new Byte[32] { 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0 };// Encoding.ASCII.GetBytes(keyfile); byte[] business books iv = new Byte[8] { 0, 1, 2, 3, 4, 5, 6, 7 }; PrintByteArray(plain_text); GOSTsymmManaged gost = new GOSTsymmManaged(); gost.LoadTestSBoxes(2); gost.Key = key; gost.IV = iv; gost.Mode = CipherMode.CBC; ////////////////////////// GOSTsymmTransform business books ct_d = (GOSTsymmTransform)gost.CreateDecryptor(); MemoryStream ms = new MemoryStream(); byte[] cipher_text = Encoding.ASCII.GetBytes(keypassword); PrintByteArray(cipher_text); CryptoStream cs2 = new CryptoStream(ms, business books ct_d, CryptoStreamMode.Write); cs2.Write(cipher_text, business books 0, cipher_text.Length); cs2.Close(); byte[] business books decrypted_text = ms.ToArray(); PrintByteArray(decrypted_text); ////////////////////////////////////// textBox1.Text = (Encoding.ASCII.GetString(decrypted_text)); business books } static void PrintByteArray(Byte[] arr) { if (arr == null) { Console.WriteLine("null"); return; } int i; for (i = 0; i < arr.Length; i++) { Console.Write("{0:X} ", arr ); if ((i + 9) % 8 == 0) Console.WriteLine(); } if (i % 8 != 0) Console.WriteLine(); //Console.ReadKey(true); } } }
Что такое файлы *.kps ? Это наверно закодированные business books данные? Но тогда их нельзя читать методом business books File.ReadAllText(), business books потому что этот метод предназначен для чтения текста, а не бинарных данных. Используйте File.ReadAllBytes().
Цитата Algol36: Что такое файлы *.kps ? Это переименованные текстовики, куда записаны преобразованные business books перестановкой по ГОСТ сообщения. Шифрованный текст преобразован методом string mywords=BitConverter.ToString(cipher_text, 0); И записан как : FileStream fs = new FileStream("I:\\PASSWORD.kps", FileMode.Append, FileAccess.Write, FileShare.Write); fs.Close(); StreamWriter sw = new StreamWriter("I:\\PASSWORD.kps",

true, Encoding.ASCII); string NextLine = mywords; sw.Write(NextLine); sw.Close(); Algol36, Ваш совет увы не помог. Программа упорно отказывается работать ссылаясь , цитирую: "Input data should be a multiple of the block size (8 bytes)" Плохо понимаю, как такое может быть, учитывая что алгоритм симметричного шифрования и кол-во байтов должно быть кратным 8 по определению...Кажется все входные данные заданны...Совершенно не представляю какого рожна не хватает.
Возможно я неправильно работаю с записью массива байтов в файл, пользуясь конструкцией: string textinb =BitConverter.ToString(cipher_text, 0); FileStream fs = new FileStream("H:\\PASSWORD.kps", FileMode.Append, FileAccess.Write, FileShare.Write); fs.Close(); StreamWriter sw = new StreamWriter("H:\\PASSWORD.kps", true, Encoding.ASCII); string NextLine business books = textinb; sw.Write(NextLine); sw.Close();
Цитата Hyder: Возможно я неправильно работаю Зачем столько строчек кода непонятно business books для каких целей. Есть же простые методы: System.IO.File.WriteAllBytes("H:\\PASSWORD.kps", cipher_text); или System.IO.File.WriteAllText("H:\\PASSWORD.kps", BitConverter.ToString(cipher_text), Encoding.ASCII);
Цитата marshal64: Есть же простые методы: Пожалуй, это действительно business books более простые и логичные вызовы.Спасибо marshal64! Сказывается моё слабое владение "Си". Программу я всё таки адаптировал, проблема оказалась в логическом вызове записанного файла: фактически я записывал business books пустой массив байт, прежде чем он успеет заполнится шифруемым текстом. Не доглядел... Хотелось бы прояснить ещё несколько моментов. business books 1) Конструкция "System.IO.Оператор" имеет преимущество по скорости выполнения по сравнению с обращением в начале business books кода using System.IO ? И в каких случаях целесообразней использовать конструкции аналогичные "System.IO.Оператор" ? 2) Шифровка текста удалась, однако останавливаться business books не хочется, хотя программа и выпо

No comments:

Post a Comment