Выпуск № 1319 от 31.05.2009, 22:35
Администратор рассылки: Dr_Andrew, Младший модератор
В рассылке: подписчиков - 628, экспертов - 142
В номере: вопросов - 1, ответов - 2
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 168354: Нигде не могу найти опубликованные коды реализации криптоалгоритма 3DES. По словам преподавателя в университете, они существуют. Собственно, как можно реализовать алгоритм 3DES в C++, скажем для шифрования сообщения, предположим вводимого в...
Вопрос № 168354:
Нигде не могу найти опубликованные коды реализации криптоалгоритма 3DES. По словам преподавателя в университете, они существуют. Собственно, как можно реализовать алгоритм 3DES в C++, скажем для шифрования сообщения, предположим вводимого в программе (или файла)?
Отправлен: 26.05.2009, 22:09
Вопрос задал: Ishly, Посетитель
Всего ответов: 2 Страница вопроса >>
Отвечает AMV007, 2-й класс :
Здравствуйте, Ishly. пот пример : www.amv007.narod.ru/DES3DES.ZIP
Приложение:
----- Работать, работать и еще раз работать (да не, шутка :) )
Ответ отправил: AMV007, 2-й класс
Ответ отправлен: 26.05.2009, 22:33
Оценка ответа: 5 Комментарий к оценке: Спасибо, как я понял, это будет выполняться в console application...
Если так, то builder ругается на строку: friend triple_des; И пишет: Friends must be function of classes.
Только не понятно почему, ведь ранее "triple_des" был задан "как class".
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 249880
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Micren, Практикант :
Здравствуйте, Ishly Хотелось бы Вам показать как это можно сделать в знакомой(наверное) Вам ОС Windows. Дело в том, что Windows имеет в своем составе интерфейс CryptoAPI. И поддерживает большинство популярных алгоритмов шифрования данных. Например: AES,DES,3DES,RSA,Diffie-Hellman и др. Пример программы:
int main() { locale::global(locale("russian_russia.866"));
// Введем строку для шифрования wcout<<L"Введите строку, какую Вы хотели бы зашифровать(secret):"<<endl; wstring secret; getline(wcin,secret);
// Буфер для работы алгоритмов шифрования BYTE* buffer;
try { // Размер строки в памяти size_t strAllocSize=sizeof(wstring::value_type)*secret.length(); // Размер буфера должен быть немного больше size_t bufferSize=strAllocSize+8; // Выделяем память под буфер buffer=new BYTE[bufferSize];
#pragma warning(disable:4996) // Копируем строку в буфер secret.copy(reinterpret_cast<wstring::value_type*>(buffer),secret.length(),0); #pragma
warning(default:4996)
// Crypto Sevice Provider HCRYPTPROV provider; // Попытаемся получить CSP if(!CryptAcquireContext(&provider,0,MS_ENHANCED_PROV,PROV_RSA_FULL,0)) { throw L"Не получилось получить CSP"; }
// Демонстрация экспорта ключа // Для работы этой программы не нужна, но если есть желание // расшифровать данные где то еще, то ключ необходим
// Сюда будем экспортировать BYTE* keyBlob=0; // Длина ключа DWORD keyBlobLength=0; // Получим размер ключа if(!CryptExportKey(key,0,PLAINTEXTKEYBLOB,0,0,&keyBlobLength))
{ throw L"Не получилось вычислить длину ключа"; } // Выделим память для ключа keyBlob=new BYTE[keyBlobLength]; // Экспорт ключа if(!CryptExportKey(key,0,PLAINTEXTKEYBLOB,0,keyBlob,&keyBlobLength)) { throw L"Не получилось экспортировать ключ"; }
// Распечатаем его wcout<<endl<<L"Сгенерирован
ключ(hex):"<<endl; for(size_t i=0;i<keyBlobLength;++i) { wcout<<hex<<keyBlob[i]; } wcout<<endl; // Освободим память за ненадобностью delete[] keyBlob;
// Размер наших данных для шифрования DWORD dataSize=strAllocSize; // Шифруем if(!CryptEncrypt(key,0,true,0,buffer,&dataSize,bufferSize))
{ throw L"Зашифровать данные не удалось"; }
// Распечатаем то, что у нас получилось wcout<<endl<<L"Зашифрованная строка(hex):"<<endl; for(size_t i=0;i<dataSize;++i) { wcout<<hex<<buffer[i]; }
// Попробуем расшифровать wcout<<endl<<endl <<L"Попробуем
ее расшифровать:"<<endl; if(!CryptDecrypt(key,0,true,0,buffer,&dataSize)) { throw L"Расшифровать данные не получилось"; }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.