Строка зашифрована со следующими свойствами (с использованием C#):
myAes.Mode = CipherMode.CBC
myAes.KeySize = 128
myAes.Padding = PaddingMode.PKCS7
myAes.BlockSize = 128
myAes.FeedbackSize = 128
Ключ: 5753B8AA97BE5B5D9584864DF3134E64
Это моя функция расшифровки:
int AESdecrypt (символ без знака * зашифрованный текст, size_t ciphertext_len, символ без знака * ключ, символ без знака * iv, символ без знака * открытый текст)
{
EVP_CIPHER_CTX *ctx;
внутр. лен;
интервал retErrors=1;
интервал открытый_текст_len;
/* Создаем и инициализируем контекст */
если(!(ctx = EVP_CIPHER_CTX_new()))
{
LOGF_TRACE("\t Ошибка в EVP_CIPHER_CTX_new");
EVP_CIPHER_CTX_free(ctx);
вернуть 0;
}
/*
* Инициализировать операцию расшифровки. ВАЖНО - убедитесь, что вы используете ключ
* и размер IV, соответствующий вашему шифру
* В этом примере мы используем 256-битный AES (т. е. 256-битный ключ).
* Размер IV для *большинства* режимов такой же, как размер блока. Для AES это
* 128 бит
*/
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, ключ, iv))
{
LOGF_TRACE("\t Ошибка в EVP_DecryptInit_ex");
EVP_CIPHER_CTX_free(ctx);
вернуть 0;
}
/*
* Предоставьте сообщение для расшифровки и получите вывод в виде открытого текста.
* При необходимости EVP_DecryptUpdate может вызываться несколько раз.
*/
if(1 != EVP_DecryptUpdate(ctx, открытый текст, &len, зашифрованный текст, ciphertext_len))
{
LOGF_TRACE("\t EVP_DecryptUpdate");
EVP_CIPHER_CTX_free(ctx);
вернуть 0;
}
длина_текста = длина;
/*
* Завершите расшифровку. Дальнейшие байты открытого текста могут быть записаны в
* этот этап.
*/
if(1 != EVP_DecryptFinal_ex(ctx, открытый текст + длина, &длина))
{
LOGF_TRACE("\t EVP_DecryptFinal_ex");
EVP_CIPHER_CTX_free(ctx);
вернуть 0;
}
длина_текста += длина;
/* Очистка */
EVP_CIPHER_CTX_free(ctx);
вернуть открытый текст_len;
}
Однако, когда я пытаюсь расшифровать результирующую строку, есть 16 (0x10) дополнительных байтов: (Удалены некоторые символы из соображений безопасности).
0000 - 2e 3c 81 6b ed 2e 6b 59-fe 38 ae b7 56 11 1f c2 .<.k..kY.8..V...
0010 - 45 53 54 41 20 45 53 20-55 4e 41 20 50 52 55 45 ЭСТА ЕС УНА ПРЮ
0020 - 42 41 20 44 45 20 43 49-46 52 41 44 4f 20 41 45 BA DE CIFRADO AE
0030 - 53 20 50 41 52 41 20 45-54 48 45 52 4e 45 54 20 S PARA ETHERNET
0040 - ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ-ХХ ХХ ХХ ХХХХХХХХХ
Я хотел бы знать, нормально ли это, и я должен просто удалить первые 16 байтов или как избежать этих лишних байтов (мне это не кажется нормальным).
Может ли это иметь какое-то отношение к IV, который они используют для шифрования?
Спасибо.