Вот код PHP, который расшифровывает содержимое $ data:
$data='DwRktl1y8st4k11pSxy2tE9kJMiNlIgV6Gu9ekY8ia2QtoGbdiaiemHeQJ+2MGTZmRKM0IGsiXQyqvXLx/t47FcXmwzZPayS3i6mmYD+qFibbcmA5lGI1uIjT7FSgLM9Xi9QBnTMjIwIEmv6tQaKGGTbhwvUuaP7hek57Xnlk+9CCarkkDlGLed5y+6GedXED0KgMcW1rqXLH7EQub+KzQ==';
$crypttext = base64_decode($data);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'AbcNtByIGI1BpgcsAG8GZl8pdwwxyz', $crypttext, MCRYPT_MODE_ECB, $iv);
Я пробовал это .net, но это не сработало:
string data = "DwRktl1y8st4k11pSxy2tE9kJMiNlIgV6Gu9ekY8ia2QtoGbdiaiemHeQJ+2MGTZmRKM0IGsiXQyqvXLx/t47FcXmwzZPayS3i6mmYD+qFibbcmA5lGI1uIjT7FSgLM9Xi9QBnTMjIwIEmv6tQaKGGTbhwvUuaP7hek57Xnlk+9CCarkkDlGLed5y+6GedXED0KgMcW1rqXLH7EQub+KzQ==";
byte[] arrb = Convert.FromBase64String(data);
string decodedString = Encoding.UTF8.GetString(arrb);
const string key = "AbcNtByIGI1BpgcsAG8GZl8pdwwxyz";
RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 256;
aes.Padding = PaddingMode.None;
aes.Mode = CipherMode.ECB;
aes.GenerateIV();
ICryptoTransform decryptor = aes.CreateDecryptor(Encoding.UTF8.GetBytes(key), aes.IV);
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(decodedString.Trim()));
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
user_data = sr.ReadToEnd();
Я получаю исключение «длина данных для расшифровки недопустима».
Кто-нибудь может подсказать, где я могу пойти не так?
Не полное решение, но вы должны избавиться от decodedString. данные содержат зашифрованные двоичные данные в формате base64. arrb содержит 160 байтов зашифрованных двоичных данных. arrb — это то, что вам нужно передать для расшифровки, не делайте преобразование из двоичного в строковое, затем в строковое в двоичное, что приводит к потере информации.
Других решений пока нет …