Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Исходники и статьи
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.11.2010, 00:05
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию Шифрование текствых строк для 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  
Старый 29.11.2010, 16:22
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Если есть вопросы, замечания, пожелания - пишите.


Криптостойкость:

Так как с основы (шифра РЦ4) я ничего не выбрасывал, то она практически равна криптостойкости РЦ4.
Хотя) Думаю, стойче.
Опять же, от кого защита? - Дотаточно для защиты от админов того же вконтакта, от вашего соседа месного хацкера Васи и т.д.

Последний раз редактировалось Konrad, 08.10.2012 в 19:26.
  #3  
Старый 01.12.2010, 00:06
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Отзывы есть?

М.б. советы по улучшению?

Думал дописать что-то вроде менеджера паролей, стоит ли?
  #4  
Старый 01.12.2010, 02:16
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

С кириллицей некорректно работает.
При компиляции:
Цитата:
[DCC Hint] Unit1.pas(97): H2077 Value assigned to 'np' never used
[DCC Hint] Unit1.pas(203): H2077 Value assigned to 'np' never used
Менеджер паролей думаю не помешает.

P.S. Сразу не подумал, проблемы с кириллицей наверное из-за юникода (компилировал в Delphi 2009). Твой exe проверить не могу, ибо:
Цитата:
Приложению не удалось запуститься, поскольку rtl70.bpl не был найден

Последний раз редактировалось ryderx34, 01.12.2010 в 02:30.
  #5  
Старый 01.12.2010, 19:44
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Перезалил файлы, должно работать.

С юникодом конечно же врядли получится...


В варианте Ska+ добавил "менеджер" паролей.

Сначала начал делать мегобазу с паролями, с поиском, добавлениями элементов, ID и т.д.
НО увидел как растут исходники, в то время как полезных функций не так уж и много.
И теряется главное достоинство программы - простота в понимании исходников.

Поэтому добавил своеобразный "менеджер".

Итак вводим пароль, например, "123456"(пароль от базы-примера)
и жмем кнопку PasOpen открывается база, которая начинается на [P@ass
Если нужно сохранить - удаляем символ "[", таки мобразом получиться начало базы P@ass редактируем базу, и сохраняем кнопкой PasSave.

За символами P@ass база может быть в каком угодно формате...

Последний раз редактировалось Konrad, 01.12.2010 в 23:38.
  #6  
Старый 01.12.2010, 23:32
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Всё равно то же самое, требует rtl70.bpl, а потом ещё и vcl70.bpl. Но я всё-таки запустил (нашёл нужные файлы в архиве с Delphi 7), работает отлично.
  #7  
Старый 01.12.2010, 23:54
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от ryderx34
Всё равно то же самое, требует rtl70.bpl, а потом ещё и vcl70.bpl. Но я всё-таки запустил (нашёл нужные файлы в архиве с Delphi 7), работает отлично.
Ясно.. что-то я намудрил с теми пакерами)

В любом случае есть иходники.

Главная идея в этом коде - простота и понятность исходника....

Может есть еще идеи что можно добавить/изменить в проге?

Последний раз редактировалось Konrad, 08.10.2012 в 19:26.
  #8  
Старый 02.12.2010, 22:08
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Обновил ЕХЕ-шик:
Ska.part1.rar (96.7 Кбайт)
Ska.part2.rar (79.8 Кбайт)

Закинул уже все что можно, должно работать.

В окне вводим любой пароль >6 символов.
Ну а далее все как в первой версии.


Если первый раз открыть базу паролей ( ее соответственно еще нету у вас) - просто создаем в той же папке пустой файл baz.txt.

Если нет необходимости - базой можно и не пользоваться - просто вводим пароль, сообщение и жмем -=Z=-.

Последний раз редактировалось Konrad, 02.12.2010 в 22:18.
  #9  
Старый 08.12.2010, 12:59
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

И тишина.

Скачиваний - 1
  #10  
Старый 08.12.2010, 17:23
mirt steelwater mirt steelwater вне форума
Прохожий
 
Регистрация: 17.10.2010
Сообщения: 35
Репутация: 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  
Старый 08.12.2010, 17:30
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Код:
uses
................
btypes, anu_base,
anu_ctr, anu_cbc;
В том то и проблема, когда программа начинает обростать всякими доп. библиотеками, ресурсами и хз чем еще....
я исходил из простоты и понятности алгоритма.


Понятное дело что можно закинуть туда все что угодно, но смысл?

Стойкость?
Тогда уж лучше не анубис, а тот же рендал... туфиш... но программа будет далеко не простой в понимании.
  #12  
Старый 08.12.2010, 17:34
mirt steelwater mirt steelwater вне форума
Прохожий
 
Регистрация: 17.10.2010
Сообщения: 35
Репутация: 10
По умолчанию

анубис - это улучшенный Rijndael. две рыбы - да, хороший, можно и 3 рыбы попробовать - он, кстати, очень простой, проще чем RC4
  #13  
Старый 08.12.2010, 17:52
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от mirt steelwater
проще чем RC4
Чем?)

На вкус и цвет))))
  #14  
Старый 08.12.2010, 17:59
mirt steelwater mirt steelwater вне форума
Прохожий
 
Регистрация: 17.10.2010
Сообщения: 35
Репутация: 10
По умолчанию

он надежнее аэс и его реализация так же коротка, как и рц4
http://cartman-cipher.narod.ru/mirror/threefish512.zip
мне нужна защита не от соседа хацкера Васи, а от любого человека или организации с любыми доступными мощностями.
зачем использовать алгоритмы, которые заведомо дырявы?
вообще очень хорошо бы реализовать GNU PGP на Delphi - это признанная мировым сообществом система, надежна, имеет открытый исходный код..

Последний раз редактировалось mirt steelwater, 08.12.2010 в 18:06.
  #15  
Старый 08.12.2010, 18:58
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от mirt steelwater
а от любого человека или организации с любыми доступными мощностями.

Это нереально, и аэс не поможет тут никак.
Так как та супер организация всегда сможет тебя достать где бы ты ни был, и... терморектальный кр.анализ рулит))))

Цитата:
Сообщение от mirt steelwater
зачем использовать алгоритмы, которые заведомо дырявы?
Ты смотрел реализацию алгоритма в моей программе?)
Анализировал его?)
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter