![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Программа, которая реализует шифрование текствых строк, которые можно передавать через vkontakte, ICQ, skype, почту... или любую другую программу, через которую можно передать текст. (Хоть Counter_Strike, хоть Lineage2
![]() Инструкция: 0. Задаем пароль в желтом поле, например, "123". 1. Пишем сообщение "Сообщение". 2. Жмем на кнопку "З". (получаем шифртекст, который уже автоматом был скопирован в буфер обмена). 3. Переходим в приложение, через которое будем передавать сообщение, и жмем Сtrl+V, - E66C667C16D1CBB980C3ABD7F7EBD7481A5DE05B99B4265CA1 F0. Обратный порядок: 1. Копируем в приложении, через которое было передано сообщение, шифртекст E66C667C16D1CBB980C3ABD7F7EBD7481A5DE05B99B4265CA1 F0. 2. Жмем на кнопку "Вставить заш. текст." 3. Жмем на "Р". 4. В зеленом поле получаем сообщение "Сообщение" Функции mxmz, mxmr - шифровка и расшифровка соответственно. HexToInt -не моя, а чесно спертая с какого-то сайта, уж меня простит тот кто её написал ![]() П.с.: программу не оптимизировал, чтобы она была понятна всем. (Там много чего лишнего, кое какие куски кода можно сократить, но потом не разбереш что, где и как) Алгоритм - модификация РЦ4, так как сам РЦ4 в чистом виде запатентирован. (правда срок действия патента истекает, но зачем себе лишние проблемы). Алгоритм на много стойче простого шифра Цезаря и ксора, или того же Виженера. Последний раз редактировалось Konrad, 08.10.2012 в 19:24. |
#2
|
||||
|
||||
![]() Если есть вопросы, замечания, пожелания - пишите.
Криптостойкость: Так как с основы (шифра РЦ4) я ничего не выбрасывал, то она практически равна криптостойкости РЦ4. Хотя) Думаю, стойче. ![]() Опять же, от кого защита? - Дотаточно для защиты от админов того же вконтакта, от вашего соседа месного хацкера Васи и т.д. Последний раз редактировалось Konrad, 08.10.2012 в 19:26. |
#3
|
||||
|
||||
![]() Отзывы есть?
М.б. советы по улучшению? Думал дописать что-то вроде менеджера паролей, стоит ли? |
#4
|
||||
|
||||
![]() С кириллицей некорректно работает.
При компиляции: Цитата:
P.S. Сразу не подумал, проблемы с кириллицей наверное из-за юникода (компилировал в Delphi 2009). Твой exe проверить не могу, ибо: Цитата:
Последний раз редактировалось ryderx34, 01.12.2010 в 02:30. |
#5
|
||||
|
||||
![]() Перезалил файлы, должно работать.
С юникодом конечно же врядли получится... В варианте Ska+ добавил "менеджер" паролей. Сначала начал делать мегобазу с паролями, с поиском, добавлениями элементов, ID и т.д. НО увидел как растут исходники, в то время как полезных функций не так уж и много. И теряется главное достоинство программы - простота в понимании исходников. Поэтому добавил своеобразный "менеджер". Итак вводим пароль, например, "123456"(пароль от базы-примера) и жмем кнопку PasOpen открывается база, которая начинается на [P@ass Если нужно сохранить - удаляем символ "[", таки мобразом получиться начало базы P@ass редактируем базу, и сохраняем кнопкой PasSave. За символами P@ass база может быть в каком угодно формате... Последний раз редактировалось Konrad, 01.12.2010 в 23:38. |
#6
|
||||
|
||||
![]() Всё равно то же самое, требует rtl70.bpl, а потом ещё и vcl70.bpl. Но я всё-таки запустил (нашёл нужные файлы в архиве с Delphi 7), работает отлично.
|
#7
|
||||
|
||||
![]() Цитата:
В любом случае есть иходники. Главная идея в этом коде - простота и понятность исходника.... Может есть еще идеи что можно добавить/изменить в проге? Последний раз редактировалось Konrad, 08.10.2012 в 19:26. |
#8
|
||||
|
||||
![]() Обновил ЕХЕ-шик:
Ska.part1.rar (96.7 Кбайт) Ska.part2.rar (79.8 Кбайт) Закинул уже все что можно, должно работать. В окне вводим любой пароль >6 символов. Ну а далее все как в первой версии. Если первый раз открыть базу паролей ( ее соответственно еще нету у вас) - просто создаем в той же папке пустой файл baz.txt. Если нет необходимости - базой можно и не пользоваться - просто вводим пароль, сообщение и жмем -=Z=-. Последний раз редактировалось Konrad, 02.12.2010 в 22:18. |
#9
|
||||
|
||||
![]() И тишина.
Скачиваний - 1 ![]() |
#10
|
|||
|
|||
![]() ок, посмотрел исходники поискал более надежный алгоритм блочного шифрования, остановился на ANUBIS:
http://ru.wikipedia.org/wiki/Anubis нашел исходники на С от автора: http://www.larc.usp.br/~pbarreto/AnubisPage.html нашел реализацию на Дельфи от какго-то немецкого профессора: http://home.netsurf.de/wolfgang.ehrhardt/crypt_en.html в итоге написал такое вот: Код:
unit Anubis; interface uses Windows, SysUtils, Classes, btypes, anu_base, anu_ctr, anu_cbc; {$ALIGN ON} type TAnubisByteKey128 = array [0..15] of Byte; TAnubisByteKey160 = array [0..19] of Byte; TAnubisByteKey192 = array [0..23] of Byte; TAnubisByteKey256 = array [0..31] of Byte; TAnubisCharKey128 = array [0..15] of Char8; TAnubisCharKey160 = array [0..19] of Char8; TAnubisCharKey192 = array [0..23] of Char8; TAnubisCharKey256 = array [0..31] of Char8; TAnubisBlock = TANUBlock; const NULL_ANUBIS_BLOCK : TAnubisBlock = ($00,$00,$00,$00, $00,$00,$00,$00, $00,$00,$00,$00, $00,$00,$00,$00); function AnubisEncrypt (const aValue: String; const aKey; const aKeyBits: WORD; IV: TAnubisBlock) : String; overload; function AnubisEncrypt (const aValue: String; const aKey; const aKeyBits: WORD) : String; overload; function AnubisDecrypt (const aValue: String; const aKey; const aKeyBits: WORD; IV: TAnubisBlock) : String; overload; function AnubisDecrypt (const aValue: String; const aKey; const aKeyBits: WORD) : String; overload; function AnubisError (const anErrorCode: Integer) : String; {$I 'anu_err.inc'} implementation function StrToHex (const aValue: String) : String; var I : Integer; begin Result := ''; for I := 1 to Length (aValue) do begin Result := Result + IntToHex ( Ord (aValue [i]), 2 ); end; end; function HexToStr (const aValue: String) : String; var I : Integer; Buffer : String [3]; begin Result := ''; I := 0; while ( I < Length (aValue) ) do begin Inc (I); if ( I mod 2 = 0 ) then begin Buffer := UpperCase ( Format ('$%s%s',[ aValue [I-1], aValue [i] ]) ); Result := Result + Char ( StrToInt (Buffer) ); end; end; end; function AnubisError (const anErrorCode: Integer) : String; begin Result := ''; case anErrorCode of -1 : Result := ERR_ANUBIS_INVALID_KEY_SIZE; -2 : Result := ERR_ANUBIS_INVALID_MODE; -3 : Result := ERR_ANUBIS_INVALID_LENGTH; -4 : Result := ERR_ANUBIS_DATA_AFTER_SHORT_BLOCK; -5 : Result := ERR_ANUBIS_MULTIPLE_INC_PROCS; -6 : Result := ERR_ANUBIS_INVALID_POINTER; -7 : Result := ERR_ANUBIS_EAX_INV_TEXT_LENGTH; -8 : Result := ERR_ANUBIS_EAX_INV_TAG_LENGTH; -9 : Result := ERR_ANUBIS_EAX_VERIFY_TAG; -15 : Result := ERR_ANUBIS_CTR_SEEK_OFFSET; -20 : Result := ERR_ANUBIS_INVALID_16BIT_LENGTH; else Result := ERR_ANUBIS_UNKNOWN; end; end; { Cipher Text Counter } function AnubisEncrypt (const aValue: String; const aKey; const aKeyBits: WORD; IV: TAnubisBlock) : String; var md : TANUContext; buf : PChar; err : Integer; I : integer; begin Result := ''; err := 0; try buf := PChar (aValue); err := ANU_CBC_Init_Encr (aKey,128,IV,md); //err := ANU_CTR_Init (aKey,128,IV,md); if ( err <> 0 ) then raise Exception.Create ( AnubisError (err) ); err := ANU_CBC_Encrypt ( buf, buf, Length (buf), md ); //err := ANU_CTR_Encrypt ( buf, buf, Length (buf), md ); if ( err <> 0 ) then raise Exception.Create ( AnubisError (err) ); finally if ( err = 0 ) then Result := StrToHex ( StrPas (buf) ); end; end; function AnubisEncrypt (const aValue: String; const aKey; const aKeyBits: WORD) : String; begin Result := AnubisEncrypt (aValue,aKey,aKeyBits,NULL_ANUBIS_BLOCK); end; function AnubisDecrypt (const aValue: String; const aKey; const aKeyBits: WORD; IV: TAnubisBlock) : String; var md : TANUContext; buf : PChar; err : Integer; begin Result := ''; err := 0; try buf := PChar ( HexToStr (aValue) ); err := ANU_CBC_Init_Decr (aKey,128,IV,md); //err := ANU_CTR_Init (aKey,128,IV,md); if ( err <> 0 ) then raise Exception.Create ( AnubisError (err) ); err := ANU_CBC_Decrypt ( buf, buf, Length (buf), md ); //err := ANU_CTR_Decrypt ( buf, buf, Length (buf), md ); if ( err <> 0 ) then raise Exception.Create ( AnubisError (err) ); finally if ( err = 0 ) then Result := StrPas (buf); end; end; function AnubisDecrypt (const aValue: String; const aKey; const aKeyBits: WORD) : String; begin Result := AnubisDecrypt (aValue,aKey,aKeyBits,NULL_ANUBIS_BLOCK); end; end. все работает, но как-то нестабильно - некоторые строки при некоторых значениях Key и IV шифруются не в 128-битную строку, а во что-то другое - то короче, то длиннее. применение несколько раз одного и того же набора Encrypt/Decrypt через несколько итераций искажает строку. кто может помочь разобраться? |
Этот пользователь сказал Спасибо mirt steelwater за это полезное сообщение: | ||
OTVET2 (18.01.2013)
|
#11
|
||||
|
||||
![]() Код:
uses ................ btypes, anu_base, anu_ctr, anu_cbc; я исходил из простоты и понятности алгоритма. Понятное дело что можно закинуть туда все что угодно, но смысл? Стойкость? Тогда уж лучше не анубис, а тот же рендал... туфиш... но программа будет далеко не простой в понимании. |
#12
|
|||
|
|||
![]() анубис - это улучшенный Rijndael. две рыбы - да, хороший, можно и 3 рыбы попробовать - он, кстати, очень простой, проще чем RC4
|
#13
|
||||
|
||||
![]() Цитата:
На вкус и цвет)))) |
#14
|
|||
|
|||
![]() он надежнее аэс и его реализация так же коротка, как и рц4
http://cartman-cipher.narod.ru/mirror/threefish512.zip мне нужна защита не от соседа хацкера Васи, а от любого человека или организации с любыми доступными мощностями. зачем использовать алгоритмы, которые заведомо дырявы? вообще очень хорошо бы реализовать GNU PGP на Delphi - это признанная мировым сообществом система, надежна, имеет открытый исходный код.. Последний раз редактировалось mirt steelwater, 08.12.2010 в 18:06. |
#15
|
||||
|
||||
![]() Цитата:
Это нереально, и аэс не поможет тут никак. Так как та супер организация всегда сможет тебя достать где бы ты ни был, и... терморектальный кр.анализ рулит)))) Цитата:
Анализировал его?) |