Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.041 c
4-1097785196
BaG
2004-10-15 00:19
2004.11.28
События клавишиатуры в Windows


4-1097501001
Shira333
2004-10-11 17:23
2004.11.28
Месторасположение объекта...


3-1099310895
Артем К.
2004-11-01 15:08
2004.11.28
Проблемы с вычисляемым полем


4-1098021793
Alex Friend
2004-10-17 18:03
2004.11.28
Использование русских символов


14-1100453991
Саша
2004-11-14 20:39
2004.11.28
GIF





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский