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

Вниз

мастера! Нужна ф-я шифрования-дешифрования строки   Найти похожие ветки 

 
Margel   (2004-11-11 08:39) [0]

Очень простая, то что я видел в кладовке, и вообще на сайтах, сложное, т.е. там MD5 и т.п, или в результате есть не ASCII символы, что не позволяет хранить в БД. Заранее спасибо.


 
begin...end ©   (2004-11-11 08:42) [1]

Margel   (11.11.04 8:39)

Самая простая функция шифрования символа:

var
 Ch1, Ch2: Char;

begin
 Ch2 := Char(Ord(Ch1) + 1)
end.

:-)))


 
S@lik ©   (2004-11-11 08:45) [2]

я использую вот этот модуль для шифрования паролей
unit uEncrypt;

interface

function Decrypt(const S: AnsiString; Key: Word): AnsiString;
function Encrypt(const S: AnsiString; Key: Word): AnsiString;

implementation

const
 C1 = 52845;
 C2 = 22719;

function Decode(const S: AnsiString): AnsiString;
const
 Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
   54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
   3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
   20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
   31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
   46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0);
var
 I: LongInt;
begin
 case Length(S) of
   2:
     begin
       I := Map[S[1]] + (Map[S[2]] shl 6);
       SetLength(Result, 1);
       Move(I, Result[1], Length(Result))
     end;
   3:
     begin
       I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
       SetLength(Result, 2);
       Move(I, Result[1], Length(Result))
     end;
   4:
     begin
       I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +
         (Map[S[4]] shl 18);
       SetLength(Result, 3);
       Move(I, Result[1], Length(Result))
     end
 end
end;

function PreProcess(const S: AnsiString): AnsiString;
var
 SS: AnsiString;
begin
 SS := S;
 Result := "";
 while SS <> "" do
 begin
   Result := Result + Decode(Copy(SS, 1, 4));
   Delete(SS, 1, 4)
 end
end;

function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString;
var
 I: Word;
 Seed: Word;
begin
 Result := S;
 Seed := Key;
 for I := 1 to Length(Result) do
 begin
   Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));
   Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2)
 end
end;

function Decrypt(const S: AnsiString; Key: Word): AnsiString;
begin
 Result := InternalDecrypt(PreProcess(S), Key)
end;

function Encode(const S: AnsiString): AnsiString;
const
 Map: array[0..63] of Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
   "abcdefghijklmnopqrstuvwxyz0123456789+/";
var
 I: LongInt;
begin
 I := 0;
 Move(S[1], I, Length(S));
 case Length(S) of
   1:
     Result := Map[I mod 64] + Map[(I shr 6) mod 64];
   2:
     Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
       Map[(I shr 12) mod 64];
   3:
     Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
       Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]
 end
end;

function PostProcess(const S: AnsiString): AnsiString;
var
 SS: AnsiString;
begin
 SS := S;
 Result := "";
 while SS <> "" do
 begin
   Result := Result + Encode(Copy(SS, 1, 3));
   Delete(SS, 1, 3)
 end
end;

function InternalEncrypt(const S: AnsiString; Key: Word): AnsiString;
var
 I: Word;
 Seed: Word;
begin
 Result := S;
 Seed := Key;
 for I := 1 to Length(Result) do
 begin
   Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));
   Seed := (Byte(Result[I]) + Seed) * Word(C1) + Word(C2)
 end
end;

function Encrypt(const S: AnsiString; Key: Word): AnsiString;
begin
 Result := PostProcess(InternalEncrypt(S, Key))
end;

end.


 
Семен Сорокин ©   (2004-11-11 08:52) [3]


> Margel   (11.11.04 08:39)

прочитай про операцию xor


 
Margel   (2004-11-11 09:06) [4]

Спасибо всем!
S@lik ©   (11.11.04 08:45)
Не подходит :( Т.к. вставляет символы перевода каретки и т.п.
Надо что нибудь по проще.
Семен Сорокин ©   (11.11.04 08:52)
Читал, но как что либо рабочее состряпать? Сейчас еще поищу..


 
Margel   (2004-11-11 09:18) [5]

Ну ладно, бог с ними с нечитаемыми, просто запишутся ли эти символы в MSSQL, таблицу с полем nvarchar??? Т.е. как я понимаю, nvarchar отрежет пробел, если он посл. а varchar сам пробелов наделает до конца поля, тогда не расшифровать :(


 
Семен Сорокин ©   (2004-11-11 09:31) [6]


> а varchar сам пробелов наделает до конца поля, тогда не
> расшифровать

пробелов наделает char, учите матчасть


 
Margel   (2004-11-11 09:41) [7]

Семен Сорокин ©   (11.11.04 09:31)
Хорошо, а запишется ли в БД зашифр. пароль с нечитаемыми символами? Я делал Showmessage(заш.пароль), например число 33 у меня зашифровалось так, что не одного визуального символа.
И второе, в nvarchar можно значит хранить зашифрованный пароль с ничитаемыми символами?


 
easy ©   (2004-11-11 09:45) [8]

function Crypt(s:string):string;
var
 key, longkey : string;
 i: integer;
 toto: string;
begin
 key:="keyy";
 for i := 0 to (length(s) div length(key)) do
   longkey := longkey + key;

 for i := 1 to length(s) do
 begin
   toto := inttohex((ord(s[i]) xor ord(longkey[i])),2);
   result := result + toto;
 end;
end;

function DeCrypt(s:string):string;
var
 key, longkey : string;
 i: integer;
 toto,c: char;
begin
 key:="keyy";
 for i := 0 to ((length(s) div 2) div length(key)) do
   longkey := longkey + key;

 for i := 1 to (length(s) div 2) do
 begin
   c:=chr(strtoint("$"+copy(s,i*2-1,2)));
   toto := chr((ord(c) xor ord(longkey[i])));
   result := result + toto;
 end;
end;


 
Семен Сорокин ©   (2004-11-11 09:46) [9]

а запишется ли в БД зашифр. пароль с нечитаемыми символами? Я делал Showmessage(заш.пароль), например число 33 у меня зашифровалось так, что не одного визуального символа.
Запишется, а зачем Вам читаемые символы, вы же их нигде показывать не будете, показывайте * например вместо символов.
в nvarchar можно значит хранить зашифрованный пароль с ничитаемыми символами?
Можно.


 
Margel   (2004-11-11 10:06) [10]

Семен Сорокин ©   (11.11.04 09:46)
Спасибо, реализовал, работает на ура!
easy ©   (11.11.04 09:45)
Надо в кладовку такой код, а то там только сложное лежит, по этой теме, спасибо!


 
Ricko ©   (2004-11-11 11:37) [11]

А я думал кладовка закрыта.



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
14-1100093600
Anonimus
2004-11-10 16:33
2004.11.28
Сокеты


6-1095420604
Softal
2004-09-17 15:30
2004.11.28
Ssh


6-1095591217
Biatri$
2004-09-19 14:53
2004.11.28
Хедер (рапер) для dnsapi.dll


6-1095347434
Lord de Mon
2004-09-16 19:10
2004.11.28
Proxy в NMHTTP


6-1095681156
Senator
2004-09-20 15:52
2004.11.28
TServerSocket