цель c шифрование aes 128 for.net aes


Таким образом, я наконец нашел что-то более понятное в реализации шифрования AES 128 для службы .Net Wcf с тем же шифрованием. Моя проблема с ним сейчас заключается в том, что всякий раз, когда он будет пытаться расшифровать строку, у него будет шаг, на котором он выполняет преобразование FromBase64String, которое даст мне ошибку:

static public string DecryptString(string message, string key)
{
    string output = "";
    Rijndael aes = new RijndaelManaged();

    try
    {
        byte[] encrypted = Convert.FromBase64String(message);
        byte[] cipherText = GetCipherText(encrypted);

        aes.Key = Convert.FromBase64String(key);
        aes.Mode = CipherMode.CBC;

        aes.IV = GetIV(encrypted);

        using (MemoryStream ms = new MemoryStream())
        {
            using (ICryptoTransform decryptor = aes.CreateDecryptor())
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
                {
                    cs.Write(cipherText, 0, cipherText.Length);
                    cs.FlushFinalBlock();

                    byte[] decrypted = ms.ToArray();
                    output = Encoding.UTF8.GetString(decrypted);
                }
            }
        }
    }

Ошибка такова:

Индекс находился за пределами массива.

И это происходит на

cs.FlushFinalBlock();

Это и есть шифрование, которое он произвел для сообщения "heythere" и ключа "25f9e794323b453885f5181f1b624d0b"

0suql40BUGiDoFA4SdXJAA= =

Это исходит из моего шифрования .Net:

UnNWQfm9RaU/HgKlDNEmoXZaTzsuBoTNsA2UvDKZhc4=

PS для iPhone шифрование AES 128, вот где я получил коды от:

Совместимость AES между .Net и iPhone?

2 2

2 ответа:

Посмотрите на AES Keeping your documents secure статья на MSDN и прокрутите вниз до раздела, озаглавленного "Using the AES Class", "рисунок 15 Using AES" имеет хороший и простой пример шифрования / дешифрования.

P.S. имейте в виду, что заполнение, которое используется в некоторых режимах блочного шифра (например, AES) (например, CBC), может быть болезненным, когда разные системы разговаривают друг с другом, поскольку размеры заполнения / блока могут варьироваться от одной системы к другой... смотрите padding fun

Править: Только что заметил этот маленький драгоценный камень... simple-2-way-encryption-for-c-sharp

Вы можете найти готовый образец для iPhone и .NET здесь

В общем, алгоритм шифрования универсален и должен работать на разных языках, просто вам нужно убедиться, что оба алгоритма (например, в .NET и iPhone):

  • используя точно такой же ключ, который кодируется таким же образом для хранения / передачи (обычно base64)
  • имеют точно такие же параметры, включая схему заполнения, режим работы (например, CBC/ECB)