|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Шифрование текствых строк для vkontakte, ICQ, skype, почты
Программа, которая реализует шифрование текствых строк, которые можно передавать через 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
|
||||
|
||||
Цитата:
Это нереально, и аэс не поможет тут никак. Так как та супер организация всегда сможет тебя достать где бы ты ни был, и... терморектальный кр.анализ рулит)))) Цитата:
Анализировал его?) |