/////////////// clean ////////////////////// static nxweb_result clean_on_request( nxweb_http_server_connection* conn, nxweb_http_request* req, nxweb_http_response* resp) { if (strlen(req->path_info) <= 1 || strlen(req->path_info) >= 4 ) { nxweb_send_http_error(resp, 403, "NUMBER error!\nExample:\nhttp://host:port/clean/24"); resp->keep_alive=0; return NXWEB_ERROR; } char tmp[8] = {0}; strcpy(tmp, (req->path_info) +1); int interval_hour = atoi(tmp); if (interval_hour < 0 || interval_hour > 99) { nxweb_send_http_error(resp, 403, "NUMBER error!\nExample:\nhttp://host:port/clean/24"); resp->keep_alive=0; return NXWEB_ERROR; } WipeData(interval_hour); nxweb_response_printf(resp, "OK"); return NXWEB_OK; }
////////////////////////////////////////////////////////////////////// // Шифрование исходного блока данных парольным блоком данных void CInKey::Decrypt(char *prgbSourceBuffer, long int lSourceSize, char *prgbPasswordBuffer) { long int i; // Курсоры в блоке парольных данных long int L, R; // Битовое представление данных char *prgbBitData = new char[2 * NBITS * lSourceSize]; // Активируем режим расшифровки int mode = DECRYPT; // ГЕНЕРИРУЕМ MVS - Move VectorS StartToGenerateMVS(); // Изначально данные лежат в начале массива (после перекодирования) bitDataPosition = 0; // Курсор R в парольном буфере встает на свое место... L = (lSourceSize - 1); //...а L - на свое. R = 0; // Перекодирование исходных данных в "битовое" отображение ConvertSourceToBitData(prgbSourceBuffer, lSourceSize, prgbBitData); // Очищаем буфер исходных данных, чтобы обеспечить корректное // наложение битовых данных из prgbBitData WipeData(prgbSourceBuffer, lSourceSize); ///////////////////////////////// // Обработка данных: РАСШИФРОВКА ///////////////////////////////// // Работаем до тех пор, пока все парольные данные не использованы for (i = 0; i < lSourceSize; i++) { // Вращаем битовые данные первым алгоритмом RotateBitData(lSourceSize, prgbPasswordBuffer, prgbBitData, L, mode); // Установка вектора перестановок (циклический вызов приводит // к изменению порядка следования "битов") MixBitData(lSourceSize, prgbPasswordBuffer, prgbBitData, L, R, mode); // "левый" курсор выборки ключа L--; // "правый" курсор выборки ключа R++; // Обновляем прогресс if (UpdateProgress != NULL) { UpdateProgress(i); } } // Перекодирование данных из "битовой" формы в исходную ConvertBitDataToSource(prgbSourceBuffer, lSourceSize, prgbBitData); // Уничтожаем данные... WipeData(prgbBitData, 2 * NBITS * lSourceSize); if (prgbBitData) { delete [] prgbBitData; prgbBitData = NULL; } }