![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
Это нереально, и аэс не поможет тут никак. Так как та супер организация всегда сможет тебя достать где бы ты ни был, и... терморектальный кр.анализ рулит)))) Цитата:
Анализировал его?) |