Проблемы при дешифровании методом AES

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SanichBfmv, 5 Mar 2011.

  1. SanichBfmv

    SanichBfmv New Member

    Joined:
    9 Sep 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Проблемы при дешифровании методом 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
    В чем может быть проблема, и как избавится от них?

    Очень жду помощи от Вас. Спасибо
     
    #1 SanichBfmv, 5 Mar 2011
    Last edited: 5 Mar 2011
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Незабывай что это блочный алгоритм. по этому выравнение должно идти и буфер для расшифровки должен быть выравнен по рамеру блока.