Форум: "Потрепаться";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизПроведите ликбез по криптографии, пожалуйста Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.033 c