Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Проведите ликбез по криптографии, пожалуйста   Найти похожие ветки 

 
miwa ©   (2004-06-01 15:08) [0]

а то вижу, что реализую маленькую идею только став большим специалистом :о))
Имеется:
куча пользователей с паролями в открытом виде в базе interbase.
Надо:
зашифровать к чертям все пароли желательно без возможности восстановления. Ну, и потом при аутентификации пользователя шифровать полученный пароль и сверять с зашифрованным в базе.
Соотвественно подскажите, полжалуйста, где найти либо UDF, либо компоненты; доку, желательно попроще, без математики (я же не собираюсь реализовывать все эти алгоритмы...).


 
Layner ©   (2004-06-01 15:12) [1]

ну вот например шифрование

C1 = 14343;   //это для шифрования/дешифрования
C2 = 34567;   //ключи


function Encrypt(const S: String; Key: Word): String;
var
  I: Integer;
begin
 Result := S;
 for I := 1 to Length(S) do
     begin
          Result[I] := char(byte(S[I]) xor (Key shr 8));
          Key := (byte(Result[I]) + Key) * C1 + C2;
     end;
 end;


function Decrypt(const S: String; Key: Word): String;
var
  I: Integer;
begin
Result := S;
for I := 1 to Length(S) do
  begin
   Result[I] := char(byte(S[I]) xor (Key shr 8));
   Key := (byte(S[I]) + Key) * C1 + C2;
  end;
end;


Автор - Анатолий Подгорецкий. У него на сайте вроде нашел. За что ему спасибо.


 
miwa ©   (2004-06-01 15:19) [2]

Мне почему-то кажется, что криптостойкость таких паролей будет невелика :о). Правда, оспаривать АП не буду :о)), но все же. Есть ли возможность подключить сюда да тот же DES?


 
nikkie ©   (2004-06-01 15:19) [3]

>зашифровать к чертям все пароли желательно без возможности восстановления.
это тебе хеши нужны

компоненты:
LockBox
http://www.turbopower.com/
или
DCPcrypt
http://www.cityinthesky.co.uk/delphi.html


 
Vlad ©   (2004-06-01 15:20) [4]


> miwa ©   (01.06.04 15:08)  


> Надо:
> зашифровать к чертям все пароли желательно без возможности
> восстановления. Ну, и потом при аутентификации пользователя
> шифровать полученный пароль и сверять с зашифрованным в
> базе.

Используй хэш-функции, тогда никто не расшифрует
В сети полно исходников валяется. Возьми какой нибудь популярный алгоритм, MD5 или SHA и пользуйся.


 
default ©   (2004-06-01 15:29) [5]

можешь CRC32 использовать и размер данных описыв-их зашифр-ый пароль будет 4 байта, а не длина пароля


 
Рамиль ©   (2004-06-01 15:29) [6]

Лучше так:


const
 Delta=$9E3779B9; //константа алгоритма TEA

type
 TKey = array[0..3] of LongWord;   //128-ми битный ключ
 TBlock = array[0..1] of LongWord; //64-х битный блок

var
 FKey: TKey;

function XORBlocks(var Block1, Block2: TBlock): TBlock;
begin
 Result[0] := Block1[0] xor Block2[0];
 Result[1] := Block1[1] xor Block2[1];
end;

function ConcatBlocks(var Block1, Block2: TBlock): TKey;
begin
 Result[0] := Block1[0];
 Result[1] := Block1[1];
 Result[2] := Block2[0];
 Result[3] := Block2[1];
end;

procedure EnCryptBlock(var Block: TBlock);
var
 i, Sum: Longword;
begin
 Sum := 0;
 for i := 0 to 31 do
 begin
   inc(Sum, Delta);
   inc(Block[0],((Block[1] shl 4) + FKey[0]) xor (Block[1] + Sum) xor ((Block[1] shr 5) + FKey[1]));
   inc(Block[1],((Block[0] shl 4) + FKey[2]) xor (Block[0] + Sum) xor ((Block[0] shr 5) + FKey[3]));
 end;
end;

procedure HashPassword(Password: string);
var
 H, G, Temp, Psw: TBlock;
 Stream: TMemoryStream;
 i, AddCount: integer;
 Buf: array[0..7] of char;
begin
 FillChar(H, SizeOf(H), 0);
 G := H;
 FillChar(Buf, SizeOf(Buf), 0);
 Stream := TMemoryStream.Create;
 try
   Stream.Write(PChar(Password)^, SizeOf(Char) * Length(Password));
   SetString(Password, PChar(StringOfChar(#0, Length(Password))), Length(Password));
   AddCount := (8 - Stream.Size mod 8) mod 8;
   if Stream.Size = 0 then AddCount := 8;
   Stream.Write(Buf, AddCount);
   Stream.Position := 0;
   //хеш-алгоритм "Tandem DM"
   for i := 1 to Stream.Size div 8 do
   begin
     Stream.Read(Psw, 8);
     Temp := H;
     FKey := ConcatBlocks(G, Psw);
     EnCryptBlock(Temp);
     H := XORBlocks(H, Temp);
     FKey := ConcatBlocks(Psw, Temp);
     Temp := G;
     EnCryptBlock(Temp);
     G := XORBlocks(G, Temp);
     FillChar(Temp, 8, 0);
     Stream.Position := Stream.Position - 8;
     Stream.Write(Temp, 8);
   end;
   FKey := ConcatBlocks(G, H);
 finally
   Stream.Free;
 end;
end;


Это часть модуля шифрования по алгоритму TEA, но так как распространение и использование средств шифрования без лицензии ФАПСИ запрещено, выкладываю только хеширование пароля:)
После вызова HashPassword в FKEY будет хеш пароля размером 128 бит.


 
__   (2004-06-01 15:33) [7]

http://delphibase.endimus.com/?action=viewtopic&topic=mathcode

http://delphibase.endimus.com/?action=viewtopic&topic=strcode


 
miwa ©   (2004-06-01 16:47) [8]


>  [3] nikkie ©   (01.06.04 15:19)
> это тебе хеши нужны
> компоненты:

Правда, да только хеши-то все время разные, значит простым сравнением их не идентифицируешь. Вот почему я о UDF спрашивал: есть такая (такие?), которые хеши сравнивать будут? Беда в том, что проверка из-под шелла или из базы должна идти. Поэтому-то и вопросс возник. Поэтому же и в "Потрепаться", а не в "Базах" или "Основной".
Тоесть, кроме как 4 Vlad:
> Возьми какой нибудь популярный алгоритм, MD5 или SHA и пользуйся
больше ничего не проканает?


 
miwa ©   (2004-06-01 16:47) [9]


>  [3] nikkie ©   (01.06.04 15:19)
> это тебе хеши нужны
> компоненты:

Правда, да только хеши-то все время разные, значит простым сравнением их не идентифицируешь. Вот почему я о UDF спрашивал: есть такая (такие?), которые хеши сравнивать будут? Беда в том, что проверка из-под шелла или из базы должна идти. Поэтому-то и вопросс возник. Поэтому же и в "Потрепаться", а не в "Базах" или "Основной".
Тоесть, кроме как 4 Vlad:
> Возьми какой нибудь популярный алгоритм, MD5 или SHA и пользуйся
больше ничего не проканает?


 
__   (2004-06-01 16:50) [10]

Брюс Шнайфер "Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С"

Там есть пример: DES, IDEA и ещё парочки.


 
Layner ©   (2004-06-01 16:51) [11]

использование средств шифрования без лицензии ФАПСИ запрещено, выкладываю только хеширование пароля:)

Да уж чего такого страшного, если и весь тут опубликуется? Сам наверное тоже на форуме каком нибудь нашел :) не ФАПСИ же дала.


 
Рамиль ©   (2004-06-01 16:54) [12]


> да только хеши-то все время разные,

Как это разные? Где ты в алгоритме получения хеша random видел?

> больше ничего не проканает?

чем тебе не нравится мой пример? Полностью рабочий.


 
nikkie ©   (2004-06-01 16:56) [13]

>Правда, да только хеши-то все время разные
с чего бы это?

>Вот почему я о UDF спрашивал: есть такая (такие?), которые хеши сравнивать будут?
если в базе нет встроенных функций вычисления хеша какого-нибудь, то можно написать свою UDF. или приложение, работающее с базой будет хеш вычислять. в чем проблема?


 
miwa ©   (2004-06-01 20:06) [14]

Может что-то не то говорю, но все же.
В этом компоненте, например,

>  [3] nikkie ©   (01.06.04 15:19)
> компоненты:
> LockBox
> http://www.turbopower.com/

в демке каждый раз когда жмешь "Decode" получаешь различный результат (для DES). Потому и подумал, что хеш все время разный.

> приложение, работающее с базой будет хеш вычислять. в чем
> проблема?

Приложение-то shell"авый скрипт, а я и дельфи-то толком не знаю. Ничего, подучусь ;о)).
Всем спасибо. Буду что-то сам писать на основе [6],[7].


 
Dok_3D ©   (2004-06-01 20:23) [15]

Ну до чего народ сложный ...:)) Сам проблемы придумывает, сам же их и решает ...

2 miwa  
Не читай все это. Используй CryptoApi от Microsoft. Выбирай любой понравившийся тебе криптопровайдер - и вперед.


 
nikkie ©   (2004-06-01 21:19) [16]

>Сам проблемы придумывает, сам же их и решает ...
я тоже самое могу сказать про
>Используй CryptoApi от Microsoft.
:)



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
3-1085148755
Smoke
2004-05-21 18:12
2004.06.20
Помогите выбрать!


3-1085722787
maximus_
2004-05-28 09:39
2004.06.20
InterBase 6.5


14-1086362616
Verg
2004-06-04 19:23
2004.06.20
Помогите по TASM-у


1-1086235134
Настенька
2004-06-03 07:58
2004.06.20
MediaPlayer и Timer


3-1085571485
den_777
2004-05-26 15:38
2004.06.20
Уникальные индексы и констрейнты