Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

base64_encode(pack("H*", sha1(utf8_encode($_GET['pwd']))))) [D7, WinXP]


qazwsx ©   (2006-04-13 23:12:00) 

Как на delphi сделать вот такую вот штуку:
base64_encode(pack("H*", sha1(utf8_encode($_GET['pwd'])))))

Как я понял тут и sha1 и base64 и pack какой-то...


sicilla   (2006-04-15 15:56:00) [1]

function EncodeBase64(const inStr: string): string;

 function Encode_Byte(b: Byte): char;
 const
   Base64Code: string[64] =
     'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
 begin
   Result := Base64Code[(b and $3F)+1];
 end;

var
 i: Integer;
begin
 i := 1;
 Result := '';
 while i < =Length(InStr) do
 begin
   Result := Result + Encode_Byte(Byte(inStr[i]) shr 2);
   Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));
   if i+1 < =Length(inStr) then
     Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))
   else
     Result := Result + '=';
   if i+2 < =Length(inStr) then
     Result := Result + Encode_Byte(Byte(inStr[i+2]))
   else
     Result := Result + '=';
   Inc(i, 3);
 end;
end;

// Base64 decoding
function DecodeBase64(const CinLine: string): string;
const
 RESULT_ERROR = -2;
var
 inLineIndex: Integer;
 c: Char;
 x: SmallInt;
 c4: Word;
 StoredC4: array[0..3] of SmallInt;
 InLineLength: Integer;
begin
 Result := '';
 inLineIndex := 1;
 c4 := 0;
 InLineLength := Length(CinLine);

 while inLineIndex < =InLineLength do
 begin
   while (inLineIndex < =InLineLength) and (c4 < 4) do
   begin
     c := CinLine[inLineIndex];
     case c of
       '+'     : x := 62;
       '/'     : x := 63;
       '0'..'9': x := Ord(c) - (Ord('0')-52);
       '='     : x := -1;
       'A'..'Z': x := Ord(c) - Ord('A');
       'a'..'z': x := Ord(c) - (Ord('a')-26);
     else
       x := RESULT_ERROR;
     end;
     if x < > RESULT_ERROR then
     begin
       StoredC4[c4] := x;
       Inc(c4);
     end;
     Inc(inLineIndex);
   end;

   if c4 = 4 then
   begin
     c4 := 0;
     Result := Result + Char((StoredC4[0] shl 2) or (StoredC4[1] shr 4));
     if StoredC4[2] = -1 then Exit;
     Result := Result + Char((StoredC4[1] shl 4) or (StoredC4[2] shr 2));
     if StoredC4[3] = -1 then Exit;
     Result := Result + Char((StoredC4[2] shl 6) or (StoredC4[3]));
   end;
 end;
end;


Чего тут гадать?


qazwsx   (2006-04-14 00:13:00) [2]

и еще sha1 у мну есть уже, но он каждый раз выдает разные "стринги" а php выдает всегда одинаковые...


qazwsx   (2006-04-14 00:12:00) [3]

то что я привел в пример, написанно на php мне нужно тоже самое написать на pascal'e


Eraser   (2006-04-13 23:39:00) [4]


> qazwsx ©   (13.04.06 23:24) [2]

по  base64_encode вроде в Indy есть соотв. компонент.
по sha1 - есть полно готовых решений, начиная с CryptoAPI и заканчивая компонентами LockBox.
по utf8_encode - есть стандартная ф-я UTF8Encode.
насчёт pack - не вкурсе что это означает в контексте вашего примера.

>  а написать сами алгоритмы можете?

нет.


qazwsx   (2006-04-13 23:24:00) [5]

знаю, а написать сами алгоритмы можете? Или ссылки дать?


Eraser   (2006-04-13 23:15:00) [6]


> qazwsx ©   (13.04.06 23:12)

в одну сточку вряд ли получится )


Наверх

Титульная страница Поиск, карта сайта Написать письмо