Простое шифрование
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]
Привет.
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]
для сирьёзнаго закрытия инфы саветую учебник Алфёрова и Co "Криптографические методы"
а если просто тебе надо сделать так чтобы текст не читался глазами напиши что-то типа:
char key = 'A'; // ключ
char *pszOpen = "this is a string";
char pszCrypt[128];
size_t len = strlen(psz);
for (size_t i=0; i<len; i++)
{
pszCrypt = pszOpen ^ key;
}
pszCrypt=0;
// в pszCrypt будет мусор, чтобы раскодировать
// необходимо ещё раз пропустить через этот алгоритм
for (size_t i=0; i<len; i++)
{
pszCrypt = pszCrypt ^ key;
}
// теперь в pszCrypt тоже самое что и в pszOpen
// можно поиграть дальше усложнив алгоритм,
// скажем каждая буква будет шифроваться не
//одним ключём key, а ключём будет позиция буквы в строке:
for (size_t i=0; i<len; i++)
{
pszCrypt = pszOpen ^ (char)i;
}
// ну и т.п. и т.д.
Второй вариант гораздо хуже первого, потому что ключ по сути дела отсутствует, достаточно иметь программу (или знать ее алгоритм) чтобы прочитать "зашифрованное" сообщение :D.
Я предлагаю следующий вариант.
int key = 0x123456; // ключ
char text[512];
strcpy(text, "This is a text to encrypt");
srand(key);
for (int i = 0; i < strlen(text); ++i)
text = text^(rand() % 256);
Алгоритм полностью симметричен: шифровка и расшифровка - одно и то же.
Просто и достаточно надежно. Конечно перебрать 2^32 вариантов ключей не так долго, но все же лучше чем ничего.
А вообще, полностью согласен на счет читать книжки.
Arestov
Второй вариант гораздо хуже первого, потому что ключ по сути дела отсутствует, достаточно иметь программу (или знать ее алгоритм) чтобы прочитать "зашифрованное" сообщение :D.
дык я и написал что это не закрытие, а просто не даёт читать открытый текст. а описывать DES, наш ГОСТ, или другую систему нет никакого желания, кому это надо он всегда это может найти
Arestov
Второй вариант гораздо хуже первого, потому что ключ по сути дела отсутствует, достаточно иметь программу (или знать ее алгоритм) чтобы прочитать "зашифрованное" сообщение :D.
Логически не верно...
Если алгоритм заранее известен то ни один из этих двух способов шифрованием не является :-)))
Зато если алгоритм неизвестен то строки поХОРеные одним значением это самый легко отслеживаемый вариант шифровки (Сохраняется частота появления в тексте определенных символов и их сочетаний) а вот если значение по которому ХОРится текст будет различным то расшифровка становится достаточно "интересной"... попробуй догадайся что там придумал автор использовать в качестве значения для каждого следующего символа, его номер i или функцию от этого номера mask=sin(i)*400-cos(i)*250/20;
ну а лучшим вариантом будет если придумать функции в которую в качестве одного из аргументов будут подставляться числа полученые каким либо образом из текстового ключа
Логически не верно...
Если алгоритм заранее известен то ни один из этих двух способов шифрованием не является :-)))
В первом варианте ключ все-таки присутствует, хотя конечно 256 вариантов - это курам на смех.
... а вот если значение по которому ХОРится текст будет различным то расшифровка становится достаточно "интересной"... попробуй догадайся что там придумал автор использовать в качестве значения для каждого следующего символа, его номер i или функцию от этого номера mask=sin(i)*400-cos(i)*250/20;
ну а лучшим вариантом будет если придумать функции в которую в качестве одного из аргументов будут подставляться числа полученые каким либо образом из текстового ключа
Не надо ничего выдумывать, вернее надо, но не функцию от номера символа, а хороший генератор случайных чисел. Занятие это доволько хлопотное, поэтому лучше использовать какой-либо стандартный алгоритм, на худой конец стандартный конгруэнтный генератор языка С (функции srand и rand, например как описано в моем предыдущем ответе).
Кстати, в серьезной криптографии алгоритм шифрования считается известной злоумышленнику (или просто любопытному).
HexoGenus
Не надо ничего выдумывать, вернее надо, но не функцию от номера символа, а хороший генератор случайных чисел. Занятие это доволько хлопотное, поэтому лучше использовать какой-либо стандартный алгоритм, на худой конец стандартный конгруэнтный генератор языка С (функции srand и rand, например как описано в моем предыдущем ответе).
Кстати, в серьезной криптографии алгоритм шифрования считается известной злоумышленнику (или просто любопытному).
Хмммммм... твой вариант требует конечно гораздо большего количества переборов... но эти переборы вполне реально выполнить не напрягая особенно головы специалистов... и я на 99% уверен что у них уже есть программы анализа и расшифровки таких "шифров" ...
А вот попробуйте построить программу способную перебирать все-возможные функции от i...
(учитывая что в качестве аргументов можно подбирать дробные числа....)
там есть исходник Blowfish
качаєшь исходник, потом присоиденяеш к своей программе
Blowfish
симетрическая криптосистема (лицензия - freeware) длина ключа от 32 - 448 бит, сменный блок шыфрования, количество раундов зависти от блок текста (plaintext)
Очень быстр 8/16/32 байт за 18 тактов процессора
а вообще поищи в интернете IDEA, ГОСТ-24...? RC5,6
А вот попробуйте построить программу способную перебирать все-возможные функции от i...
(учитывая что в качестве аргументов можно подбирать дробные числа....)
в криптографии надеются на лучшее, но всегда предпологают худшее. Модель нарушителя такова: нарушитель может иметь оборудование, алгоритм, описание, специалистов, всё, но неизвестным злоумышленнику считаеться только ключ. поэтому какой бы ф-ция не была, стойкость это не повысит. Обычно выбирают задачу которую можно решить зная некоторый параметр(ключ) за полиноминальное время, а без этого параметра задача приобретает экспоненциальную сложность. Правда пока строго не доказано что используемые задачи НЕ ИМЕЮТ более простого решения чем перебор. Примерами может служить логарифмирование в конечных полях, задача о рюкзаке и пр.
кому интересно идите в институт на специальность защита информации или что-то пдобное, там вам раскажут очень много и интересно, кое на чём даже гриф в книжках такое не найдёте. Если просто охота ознакомиться с этими вещами читайте книжки, копайте в интернет.
А вот попробуйте построить программу способную перебирать все-возможные функции от i...
Согласен, это сложновато. Но такая система очень уязвима: как только шифрующая программа попадает в не те руки, про секретность можно сразу забыть.
Намного надежней использовать проверенный и открытый (!) алгоритм шифрования. Возмем тот же Blowfish, с длиной ключа бит эдак на 256. Пусть все знают, что это Blowfish - взламывайте сколько хотите - до конца света все равно не успеете 8-).
Возмем тот же Blowfish, с длиной ключа бит эдак на 256. Пусть все знают, что это Blowfish - взламывайте сколько хотите - до конца света все равно не успеете 8-).
как я понял этот Blowfish сертификата Гостехкомиссии не имеет, да и видимо вообще никакого сертификата не имеет. Я бы не стал использовать в серьёзном проекте (скажем в банк-клиенте) такой алгоритм, потому-что строго не доказана его стойкость и в случае появления каких-то эксцессов без сертификата в суде никто разговаривать не станет :)
Его можно применять тока для развлекательного шифрования E-mail и какие-то личные данные - телефоны салонов досуга можно прятать от жены :D
RSA brouteforce'ом тоже долго ломать, но есть ряд недостатков в самой идее и открыть текст иногда можно не раскладывая на множители :) написано много трудов на эту тему, кое что можно найти даже в Интырнете :)
как я понял этот Blowfish сертификата Гостехкомиссии не имеет, да и видимо вообще никакого сертификата не имеет. Я бы не стал использовать в серьёзном проекте (скажем в банк-клиенте) такой алгоритм, потому-что строго не доказана его стойкость и в случае появления каких-то эксцессов без сертификата в суде никто разговаривать не станет :)
Его можно применять тока для развлекательного шифрования E-mail и какие-то личные данные - телефоны салонов досуга можно прятать от жены :D
:-o
Автор blowfish - Брюс Шнайдер.
Если требуются комментарии, ниже цитата из компьютерры:
Брюс Шнайер (Bruce Schneier) - президент криптографической компании Counterpane Systems (Миннеаполис, шт. Миннесота, counterpane.com). Имеет степень магистра по математике (Американский университет) и бакалавра по физике (Университет Рочестера).Член совета директоров Международной ассоциации криптологических исследований (IACR) и член консультативного совета Информационного центра электронной приватности (EPIC).
Автор самого популярного руководства по криптографии (Bruce Schneier, Applied Cryptography - John Wiley & Sons: 1996), нескольких других книг и множества специальных и популярных статей.
Вместе со своими сотрудниками Шнайер успешно атаковал многие алгоритмы, протоколы и конкретные криптографические решения. Последнее достижение - комплексный анализ уязвимых мест Microsoft PPTP, предпринятый весной прошлого года. Шнайер - разработчик симметричного шифра Blowfish, выдержавшего многолетние атаки коллег, и шифра Twofish, представленного на конкурс NIST в качестве кандидата на новый национальный стандарт.
Не надо путать серьезные приложения, и приложения где требуется какой-либо сертификат. Математика и бюрократия совершенно разные вещи.
RSA brouteforce'ом тоже долго ломать, но есть ряд недостатков в самой идее и открыть текст иногда можно не раскладывая на множители :) написано много трудов на эту тему, кое что можно найти даже в Интырнете :)
Вероятность взлома RSA без факторизации меньше, чем вероятность того, что тебе на голову упадет метеорит :D.
P.S. Не понял с кем ты судиться собрался.
Вероятность взлома RSA без факторизации меньше, чем вероятность того, что тебе на голову упадет метеорит :D.
ну например почитай это, почитай Алфёрова, полно закрытых материалов. RSA уже столько лет (c 1978), что его уже исследовали вдоль и поперёк. :)
http://anmal.narod.ru/secyriti/rsa29.11.html
в конце концов напиши в поиске "взлом RSA" найдёшь много инфы, обычно взломать позволяет неудачно выбранные P и Q, особенности открытого текста, несоблюдение некоторых правил и пр.
Не надо путать серьезные приложения, и приложения где требуется какой-либо сертификат. Математика и бюрократия совершенно разные вещи.
P.S. Не понял с кем ты судиться собрался.
Разные, спору нет. Но делаешь лы ты софт для какого-нить НИИ-"чёрного ящика" или коммерческого банка, использование сертификации обязательно :( А судиться можно например с клиентом который перевёл куда-нить бабки а потом говорит что это не он. Если система сертифицированная (стойкость системы потдверждена), и мы можем доказать по ЭЦП, что отправляли с его ключа. (то что он мог ключ скомпрометировать, уже не наше дело) с нас взятки гладки :)