Skip to content
La2Base
Home
DownloadsWikiForumFAQ
Search
ruen
Sign up Login
HomeFilesWikiLogin
  • Home
  • Downloads
  • Wiki
  • FAQ
  • Contact Us
  • About
  • Rules
  • Privacy
  • Terms of Service

© 2026 la2base.com · All rights reserved

ruen
Forum/MSSQL Скрипты/Шифрование Пароля
Search

Шифрование Пароля

14 replies675 viewsCurrently viewing: 1
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 04/29/2008, 11:21 AM

Не знаю в какой раздел лучше поместить данную тему,поэтому пишу сюда...


Ни для кого не секрет что ко многим сборкам идут в комплекте скрипты и один из них добавляет юзера "root" с одноименным паролем. В этом же скриптике есть этот пароль в зашифрованном виде,в каком его и прописывают в базу. Вот тут и возник вопрос,каким образом происходит это шифрование? изучая скрипт понял что мне чего-то не хватает и это чего-то скорее всего определенный ключ,так ли это,если да,то где его мона выцепить?
Хочу в идеале написать прогу,которая сама будет шифровать эти пароли,но никак не могу добиться этого результата,пробовал и blowfish и md5,на выходе получаю не то число,что должно быть. Помогите или намекните кто знает.

0
A
ancient

User

Участник

Posts: 25

На форуме с: 11/14/2007

Репутация: +9

Рейтинг: 0

· 04/29/2008, 11:51 AM

Содрано из l2cp

Код
function encrypt($str) {
    $key = array();
    $dst = array();
    $i = 0;

    $nBytes = strlen($str);
            while ($i < $nBytes){
                    $i++;
                    $key[$i] = ord(substr($str, $i - 1, 1));
                    $dst[$i] = $key[$i];
    }  

    $rslt = $key[1] + $key[2]*256 + $key[3]*65536 + $key[4]*16777216;
    $one = $rslt * 213119 + 2529077;
    $one = $one - intval($one/ 4294967296) * 4294967296;

    $rslt = $key[5] + $key[6]*256 + $key[7]*65536 + $key[8]*16777216;
    $two = $rslt * 213247 + 2529089;
    $two = $two - intval($two/ 4294967296) * 4294967296;

    $rslt = $key[9] + $key[10]*256 + $key[11]*65536 + $key[12]*16777216;
    $three = $rslt * 213203 + 2529589;
    $three = $three - intval($three/ 4294967296) * 4294967296;

    $rslt = $key[13] + $key[14]*256 + $key[15]*65536 + $key[16]*16777216;
    $four = $rslt * 213821 + 2529997;
    $four = $four - intval($four/ 4294967296) * 4294967296;

    $key[4] = intval($one/16777216);        
    $key[3] = intval(($one - $key[4] * 16777216) / 65535);
    $key[2] = intval(($one - $key[4] * 16777216 - $key[3] * 65536) / 256);
    $key[1] = intval(($one - $key[4] * 16777216 - $key[3] * 65536 - $key[2] * 256));

    $key[8] = intval($two/16777216);    
    $key[7] = intval(($two - $key[8] * 16777216) / 65535);
    $key[6] = intval(($two - $key[8] * 16777216 - $key[7] * 65536) / 256);
    $key[5] = intval(($two - $key[8] * 16777216 - $key[7] * 65536 - $key[6] * 256));

    $key[12] = intval($three/16777216);    
    $key[11] = intval(($three - $key[12] * 16777216) / 65535);
    $key[10] = intval(($three - $key[12] * 16777216 - $key[11] * 65536) / 256);
    $key[9] = intval(($three - $key[12] * 16777216 - $key[11] * 65536 - $key[10] * 256));

    $key[16] = intval($four/16777216);    
    $key[15] = intval(($four - $key[16] * 16777216) / 65535);
    $key[14] = intval(($four - $key[16] * 16777216 - $key[15] * 65536) / 256);
    $key[13] = intval(($four - $key[16] * 16777216 - $key[15] * 65536 - $key[14] * 256));

    $dst[1] = $dst[1] ^ $key[1];

    $i=1;
    while ($i<16){
        $i++;
        $dst[$i] = $dst[$i] ^ $dst[$i-1] ^ $key[$i];
    }

    $i=0;
    while ($i<16){
        $i++;
        if ($dst[$i] == 0) {
            $dst[$i] = 102;
        }
    }

    $encrypt = "0x";
    $i=0;
    while ($i<16){
        $i++;
        if ($dst[$i] < 16) {
            $encrypt = $encrypt . "0" . dechex($dst[$i]);
        } else {
            $encrypt = $encrypt . dechex($dst[$i]);
        }
    }

    return $encrypt;
}

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 04/29/2008, 12:10 PM

При переводе на дельфи именно этой функции получаем совсем другой ответ,поэтому и возник вопрос,что упускаем?


в скрипте root соответствует

0xb1be70e9a83f19192cb593935ec4e2e2 а вот у меня получается
0x3562FDE8A93E18182DB492925FC5E3E3


не похоже прямо скажем,а вот в чем может быть дело,не понятно...

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 04/30/2008, 10:36 AM

Пойдем другим путем :)

Подскажите,какое используется шифрование?

0
AbsT
AbsT

User

Ветеран

Posts: 1514

На форуме с: 12/10/2007

Репутация: +768

Рейтинг: 0

· 05/03/2008, 08:13 AM

Шифрование пароля в оффе никакой не md5, не sha1, не base64, и не блоуфиш.
Это собственная частная разработка ncsoft, но правда кривая.
Пользуйтесь тем что есть, на php это все работает прекрасно.
ancient, старую l2cp используешь. Тут в некоторых строчках есть косяки с делением.

— &#197;lderdom - ingen gl&#228;dje..

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 05/03/2008, 09:46 AM

Внешне правда очень похоже на md5,и задумка у меня как раз была в том,чтобы уйти от скриптов php или asp...

0
AbsT
AbsT

User

Ветеран

Posts: 1514

На форуме с: 12/10/2007

Репутация: +768

Рейтинг: 0

· 05/03/2008, 10:48 AM

А ну-ка, на. Попробуй эту пожувать

Код
function pec ( $plain ) {
  $array_mul = array ( 0 => 213119, 1 => 213247, 2 => 213203, 3 => 213821 );
  $array_add = array ( 0 => 2529077, 1 => 2529089, 2 => 2529589, 3 => 2529997 );
  $dst = $key = array ( 0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, 11 => 0, 12 => 0, 13 => 0, 14 => 0, 15 => 0 );

  for ( $i = 0; $i < strlen ( $plain ); $i++ ) {
    $dst [ $i ] = $key [ $i ] = ord ( substr ( $plain, $i, 1 ) );
  }

  for ( $i = 0; $i <= 3; $i++ ) {
    $val [ $i ] = fmod ( ( $key [ $i * 4 + 0 ] + $key [ $i * 4 + 1 ] * 0x100 + $key [ $i * 4 + 2 ] * 0x10000 + $key [ $i * 4 + 3 ] * 0x1000000 ) * $array_mul [ $i ] + $array_add [ $i ], 4294967296 );
  }

  for ( $i = 0; $i <= 3; $i++ ) {
    $key [ $i * 4 + 0 ] = $val [ $i ] & 0xff;
    $key [ $i * 4 + 1 ] = $val [ $i ] / 0x100 & 0xff;
    $key [ $i * 4 + 2 ] = $val [ $i ] / 0x10000 & 0xff;
    $key [ $i * 4 + 3 ] = $val [ $i ] / 0x1000000 & 0xff;
  }

  $dst [ 0 ] = $dst [ 0 ] ^ $key [ 0 ];
  for ( $i = 1; $i <= 15; $i++ ) {
    $dst [ $i ] = $dst [ $i ] ^ $dst [ $i - 1 ] ^ $key [ $i ];
  }

  for ( $i = 0; $i <= 15; $i++ ) {
    if ( $dst [ $i ] == 0 ) {
      $dst [ $i ] = 0x66;
    }
  }

  $encrypted = "0x";
  for ( $i = 0; $i <= 15; $i++ ) {
    if ( $dst [ $i ] < 16 ) {
      $encrypted .= "0";
    }
    $encrypted .= strtoupper ( dechex ( $dst [ $i ] ) );
  }
  return ( $encrypted );
}

— &#197;lderdom - ingen gl&#228;dje..

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 05/04/2008, 11:03 AM

PERL, попробую, посмотрим что получится

0
N
nuit

User

Участник

Posts: 79

На форуме с: 05/02/2008

Репутация: +19

Рейтинг: 0

· 05/04/2008, 11:17 AM

шифрование != хеширование

Цитата
не похоже прямо скажем,а вот в чем может быть дело,не понятно...

расставь трйэсы после каждого изменения в пхп куске.. запиши результаты :)
и отладчиком пройдись по дельфийским кускам, сравнивай результаты, найди где пропустил циферку :) "...c4e2e2" "...C5E3E3" очень даже похожи ))

0
AbsT
AbsT

User

Ветеран

Posts: 1514

На форуме с: 12/10/2007

Репутация: +768

Рейтинг: 0

· 05/04/2008, 03:14 PM

Lordaster, кстати если можешь выложи сырок.
Я тоже на делфи переписывал, но у меня гигантский вывод получился (

— &#197;lderdom - ingen gl&#228;dje..

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 05/05/2008, 08:29 AM

Покопайся может и найдешь что

Код
function Encrypt(const Text: string): string;
type
  TByteArray = array[0..3] of Byte;
var
  Key, Dst: array[1..16] of Byte;
  Index: Integer;
  Rslt: Integer;
  One, Two, Three, Four: Integer;
begin
  for Index := Low(Key) to High(Key) do
    begin
      Key[Index] := 0;
      Dst[Index] := 0;
    end;
  for Index := Succ(Low(Key)) to IfThen(Length(Text) > 16, 16, Length(Text)) do
    begin
      Key[Index] := Ord(Text[Pred(Index)]);
      Dst[Index] := Key[Index];
    end;
  TByteArray(Rslt)[0] := Key[1];
  TByteArray(Rslt)[1] := Key[2];
  TByteArray(Rslt)[2] := Key[3];
  TByteArray(Rslt)[3] := Key[4];
  One := Rslt * 213119 + 2529077;
  One := One - Trunc(One / 4294967296) * 4294967296;
  TByteArray(Rslt)[0] := Key[5];
  TByteArray(Rslt)[1] := Key[6];
  TByteArray(Rslt)[2] := Key[7];
  TByteArray(Rslt)[3] := Key[8];
  Two := Rslt * 213247 + 2529089;
  Two := Two - Trunc(Two / 4294967296) * 4294967296;
  TByteArray(Rslt)[0] := Key[9];
  TByteArray(Rslt)[1] := Key[10];
  TByteArray(Rslt)[2] := Key[11];
  TByteArray(Rslt)[3] := Key[12];
  Three := Rslt * 213203 + 2529589;
  Three := Three - Trunc(Three / 4294967296) * 4294967296;
  TByteArray(Rslt)[0] := Key[13];
  TByteArray(Rslt)[1] := Key[14];
  TByteArray(Rslt)[2] := Key[15];
  TByteArray(Rslt)[3] := Key[16];
  Four := Rslt * 213821 + 2529997;
  Four := Four - Trunc(Four / 4294967296) * 4294967296;
  Key[4] := Trunc(One / 16777216);
  Key[3] := Trunc((One - Key[4] * 16777216) / 65535);
  Key[2] := Trunc((One - Key[4] * 16777216 - Key[3] * 65536) / 256);
  Key[1] := Trunc((One - Key[4] * 16777216 - Key[3] * 65536 - Key[2] * 256));
  Key[8] := Trunc(Two / 16777216);
  Key[7] := Trunc((Two - Key[8] * 16777216) / 65535);
  Key[6] := Trunc((Two - Key[8] * 16777216 - Key[7] * 65536) / 256);
  Key[5] := Trunc((Two - Key[8] * 16777216 - Key[7] * 65536 - Key[6] * 256));
  Key[12] := Trunc(Three / 16777216);
  Key[11] := Trunc((Three - Key[12] * 16777216) / 65535);
  Key[10] := Trunc((Three - Key[12] * 16777216 - Key[11] * 65536) / 256);
  Key[9] := Trunc((Three - Key[12] * 16777216 - Key[11] * 65536 - Key[10] * 256));
  Key[16] := Trunc(Four / 16777216);
  Key[15] := Trunc((Four - Key[16] * 16777216) / 65535);
  Key[14] := Trunc((Four - Key[16] * 16777216 - Key[15] * 65536) / 256);
  Key[13] := Trunc((Four - Key[16] * 16777216 - Key[15] * 65536 - Key[14] * 256));
  Dst[1] := Dst[1] xor Key[1];
  for Index := Succ(Low(Dst)) to High(Dst) do
    Dst[Index] := Dst[Index] xor Dst[Pred(Index)] xor Key[Index];
  for Index := Low(Dst) to High(Dst) do
    if Dst[Index] = 0 then
      Dst[Index] := 102;
  Result := '0x';
  for Index := Low(Dst) to High(Dst) do
    Result := Result + IntToHex(Dst[Index], 2);
end;

0
AbsT
AbsT

User

Ветеран

Posts: 1514

На форуме с: 12/10/2007

Репутация: +768

Рейтинг: 0

· 05/05/2008, 09:57 AM

Ну и хардкор у тебя...пипец, можно было все гораздо проще сделать, без min,high, без for.
А bytearray тут вообще можно было не использовать.

Мой совет, перепиши еще раз, по более схожему виду с php скриптом. И округления никакие можно не использовать.
И нафиг не нужен хардкор с bytearray, trunc итд. Эт не бухгалтерская прога всетаки )
Лучше использовать while, а вместо умножений и делений битовые сдвиги.
У тебя проблема в матем.части, ибо значения тут прут не пральные.

— &#197;lderdom - ingen gl&#228;dje..

0
L
Lordaster

Author

Новичок

Posts: 13

На форуме с: 12/13/2007

Репутация: +19

Рейтинг: 0

· 05/05/2008, 11:09 AM

Сложно написано или просто,это десятое дело. Взято почти полностью со скрипта пхп.лучше скажи где ошибка ;)

0
AbsT
AbsT

User

Ветеран

Posts: 1514

На форуме с: 12/10/2007

Репутация: +768

Рейтинг: 0

· 05/05/2008, 11:52 AM

Я не смог найти ошибку, судя по содержанию key/dst проблема скорей всего в самом "расчете", либо в циклах.
Зачем стока нагородил ))
Можно тупо взять из пхп, убрать intval, убрать $, поменять = на :=, и скобы почистить - и все, таким образом можно гарантировать отсутствие ошибок в мат.части.

— &#197;lderdom - ingen gl&#228;dje..

0
Topic is closed for replies