Определить алгоритм шифрования

Discussion in 'WASM.CRYPTO' started by deadbeef, May 15, 2009.

  1. deadbeef

    deadbeef New Member

    Blog Posts:
    0
    Joined:
    May 15, 2009
    Messages:
    3
    Привет!

    Необходимо вычислить алгоритм шифрования пароля. Известен сам пароль, ключ шифрования и результат.

    Пароль: 00 00 00 00 00 00 00 00

    Вот несколько примеров:

    Ключ = A3 41 88 1C C3 13 7E 4E
    Результат = 11 82 3A 66 59 7C CA 48



    Ключ = C4 64 E0 68 C6 54 F6 40
    Результат = 64 B8 88 E0 D6 3A 00 70


    Ключ = 93 C9 B2 33 43 55 4A DB
    Результат = 8E 87 09 0C 7F E4 5E 49


    Ключ = 61 87 38 D5 31 13 6C 2B
    Результат = 6C 23 2B 10 11 34 90 AB

    Спасибо за внимание :)
     
  2. WRP

    WRP New Member

    Blog Posts:
    0
    Joined:
    Apr 30, 2009
    Messages:
    29
    deadbeef

    Миссия невыполнима без анализа программы ,
    использующей сие шифрование.

    P.S. Советую почитать книжки по азам криптографии.
     
  3. AndreyMust19

    AndreyMust19 New Member

    Blog Posts:
    0
    Joined:
    Oct 20, 2008
    Messages:
    714
    Можно только гадать, гадать и гадать. Ведь это шифрование необратимое (по результату нельзя узнать исходный пароль).
    Попробуй ключи, отличающиеся на 1 символ или пароли типа "PafgPafg" - возможно ты заметишь какую-то закономерность, присущую для того или иного крипта. Желательно пароли узнать.
     
  4. deadbeef

    deadbeef New Member

    Blog Posts:
    0
    Joined:
    May 15, 2009
    Messages:
    3
    Ну я просто надеялся что это может какой-то стандартный алгоритм :) Тип DES или еще что-нить.

    Вроде нашел место в программе где происходит магия. В понедельник будем посмотреть :)
     
  5. deadbeef

    deadbeef New Member

    Blog Posts:
    0
    Joined:
    May 15, 2009
    Messages:
    3
    Вопрос снят. Алгоритм раскушен :)

    Code (Text):
    1. inline unsigned char HexTetraToByte(const unsigned char HexTetra)
    2. {
    3.   if ((HexTetra >= '0') && (HexTetra <= '9'))
    4.     return HexTetra - '0';
    5.   else if((HexTetra >= 'A') && (HexTetra <= 'F'))
    6.     return 10 + HexTetra - 'A';
    7.   else
    8.     return 10 + HexTetra - 'a';
    9. };
    10.  
    11. //---------------------------------------------------------------------------
    12.  
    13. static const char* HEX = "0123456789ABCDEF";
    14.  
    15. void Encrypt(char* EncryptedPassword, // 17 байт
    16.          const char* Key,             // 16 байт
    17.          const char* Password)       // 8 байт
    18. {
    19.   unsigned char Buf[8];
    20.   const char* pch = Key;
    21.   unsigned char tmp;
    22.   for (unsigned i = 0; i < sizeof(Buf); i++)
    23.   {
    24.     Buf[i] = HexTetraToByte(*pch++) << 4;
    25.     Buf[i] += HexTetraToByte(*pch++);
    26.  
    27.     Buf[i] ^= (unsigned char) Password[i];
    28.   }
    29.  
    30.   tmp = Buf[sizeof(Buf) - 1];
    31.   for (unsigned i = 0; i < sizeof(Buf); i++)
    32.   {
    33.     tmp += Buf[i];
    34.     Buf[i] = tmp;
    35.  
    36.     EncryptedPassword[i * 2] = HEX[tmp >> 4];
    37.     EncryptedPassword[i * 2 + 1] = HEX[tmp & 0x0F];
    38.   }
    39.  
    40.   EncryptedPassword[sizeof(Buf) * 2] = 0;
    41. };