Проблемы при дешифровании методом DES Всем доброго времени суток. Имеестся два ключа шифрования для DES? назовем их a и b. Code: byte[] a = new byte[] { 0, 0xff, 0xa3, 0xbf, 1, 0xea, 0x39, 9 }; byte[] b = new byte[] { 0x33, 0xa1, 0xb9, 0xf1, 0xc4, 1, 0x92, 0x31 }; Извне получается зашифрованная ключом а строка. Задача: получить исходную строку, и зашифровать её с помощью ключа b. Code: private void button1_Click(object sender, EventArgs e) { string somestr = textBox1.Text; somestr = Decrypt(somestr, a); somestr = Encrypt(somestr, ; textBox1.Text = somestr; } public static string Encrypt(string originalString, byte[] keya) { if (String.IsNullOrEmpty(originalString)) { throw new ArgumentNullException ("The string which needs to be encrypted can not be null."); } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); //cryptoProvider.Mode = CipherMode.CBC; MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(keya,keya), CryptoStreamMode.Write); StreamWriter writer = new StreamWriter(cryptoStream); writer.Write(originalString); writer.Flush(); cryptoStream.FlushFinalBlock(); writer.Flush(); return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length); } public string Decrypt(string cryptedString, byte[] keya) { if (String.IsNullOrEmpty(cryptedString)) { throw new ArgumentNullException ("The string which needs to be decrypted can not be null."); } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); cryptoProvider.Mode = CipherMode.CFB; MemoryStream memoryStream = new MemoryStream (Convert.FromBase64String(cryptedString)); ICryptoTransform decriptor = cryptoProvider.CreateDecryptor(keya, keya); CryptoStream cryptoStream = new CryptoStream(memoryStream, decriptor , CryptoStreamMode.Read); StreamReader reader = new StreamReader(cryptoStream); return reader.ReadToEnd(); } Проблема: при дешифровке возможны ошибки: 1)Недопустимая длина массива знаков Base-64 на строке Code: MemoryStream memoryStream = new MemoryStream (Convert.FromBase64String(cryptedString)); 2)Недопустимая длина данных для дешифрования на строке Code: return reader.ReadToEnd(); 3)Плохие данные на строке Code: return reader.ReadToEnd(); Прикладываю некоторые примеры строк что пихаю в программу: Code: Нормально работающие: zXh4vZeU6WnLErceleKmMvgb9YkmIygwGKCzvtzLMW5G3XDHlmQ1wgrFuMAeKk13Jv69MhIue6qn7NWUEFynkn6/V9vHhGOQ gUWA3HDo0u2CIjIH3FdWO8g2gBuh0Pxv+1SH+iMNOUi/xw+N6akb840JxPB4r2wY2Kjk/o9NvpFTFltHVHyPSDs9RuVXJgJ4 Выкидывает ошибки: +q41UbV99Y9bo7f9o746UaqX6BSd08G1aHxVt4AXzdbQN6BFZxRHNe2aa111siYa7lSskAMHdF5NoJUKl9Xw6oRhMTnsmPOWNXrf5uHsq3ep+ZqmGw55goBUgffITm 4EkNHOQGszqEErbM6NAkho8Ih6U1oV5oVjxsRNWb3/lEU0DtuNyYRcLMXnafbwt7M5vFNrk7ElXWYr0BQhWksQ== TnIXC1U6NzeJNkebYU+ClpwM1rnE7dhHrmwz9Ao/47p3qjLslEpOBMK3bW15iPv8ljO38OMqBL59bdOc0564xMKyUqBMCWup80M6+KBsoYtUSBLlyWfSnAG9i8VFCPc8 В чем может быть проблема, и как избавится от них? Очень жду помощи от Вас. Спасибо
Незабывай что это блочный алгоритм. по этому выравнение должно идти и буфер для расшифровки должен быть выравнен по рамеру блока.