(2011-11-03 19:32:42 отредактировано MaximT)

кодировка значений типа int алгоритмом AES128

Здравствуйте,

я недавно начал работать с Вашими ключами и у меня такой вопрос: стандартная структура из примера :
в уроках по программированию ключей с помощью алгоритма AES128 (урок 3.2) представлен момент когда мы кодируем char символ.
А как я могу закодировать полученное с клавиатуры (или откуда-то еще) значение типа int?


Кстати, там, в примере, один момент: мы кодируем не то что получили с клавиатуры, а другой массив со значением полученным с клавиатуры и вставленным в середину защищаемых данных:

szMessage[MESSAGE_SIZE / 2] = *q.begin();
// Устанавливаем значение вектора инициализации
memset(pIV, 0, GrdARS_AES128);
time((time_t*)pIV);
if(pIV[0] % 2)
{
    pIV[0]--;
}
// Шифруем массив при помощи алгоритма AES128 в режиме OFB
nRet = GrdDongle.CryptEx(0x0002, sizeof(szMessage), szMessage,
    GrdAM_OFB | GrdAM_Encode, sizeof(pIV), pIV);
if (nRet)
{
        cout << "GrdCryptEx() encode faild!";
}

но когда я пытаюсь получить этот же расшифрованный и вытянуть из него то что мы вставили в середину массива

nRet = GrdDongle.CryptEx(0x0002, sizeof(szMessage), szMessage, 
    GrdAM_OFB | GrdAM_Decode, sizeof(pIV), pIV);
if (nRet)
{
    cout << "GrdCryptEx() decode failed!" << endl;
}
else
{
*q.begin() = szMessage[MESSAGE_SIZE/2];
.......

я не всегда получаю то что мы приняли с клавиатуры, как с этим бороться?

Re: кодировка значений типа int алгоритмом AES128

Здравствуйте, MaximT.

На всякий случай ниже дублирую ранее отправленный Вам по почте ответ:

Для того чтобы закодировать например целочисленную строку данных необходимо перед шифрованием помещать их в буфер соответствующего типа.

Что касается нашего примера из комплекта разработчика, то действительно наблюдается описанная Вами проблема, это является следствием не совсем корректного алгоритма формирования вектора инициализации представленного в данном примере (вектор формируется на основе данных возвращаемых стандартной WinAPI функцией time и в результате иногда могут не совпадать вектора, используемые для шифрования и дешифровки).
Если для примера использовать статически заданный вектор (или какой либо иной корректный алгоритм его формирования) то данные всегда будут дешифрованы, верно.