цель 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, вот где я получил коды от:
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)