Показать сообщение отдельно
Старый 08.03.2011, 06:18   #2
Пользователь
 
Аватар для DzumoHu4
 
Регистрация: 28.06.2008
Сообщений: 73
Сказал Спасибо: 7
Имеет 24 спасибок в 16 сообщенях
DzumoHu4 пока неопределено
По умолчанию

....
Код:
package com.lameguard.crypt;


public class LameKey
{

    public LameKey()
    {
    }

    public static byte[] expandKey(byte key[], int size)
    {
        byte P[] = new byte[64];
        for(int i = 0; i < 64; i++)
            P[i] = key[i % size];

        for(int i = 0; i < 256; i++)
        {
            byte t = P[i % 64];
            byte m = (byte)(MGBOX[MGBOX[t & 0xff] & 0xff] & 0xff ^ TKBOX[TKBOX[i] & 0xff] & 0xff);
            P[i % 64] = TKBOX[m & 0xff];
        }

        return P;
    }

    private static final byte TKBOX[] = {
        -112, 22, 124, -93, 68, -116, -19, -125, -4, 101, 
        -62, 5, 70, 25, 29, 81, 65, -86, 79, -69, 
        2, 97, -108, -11, -84, -56, 17, 7, 31, 52, 
        -34, -41, -110, -60, 57, -5, -6, -24, 98, -100, 
        23, 4, -74, -37, 1, 6, -2, -14, -77, 12, 
        -7, 3, -29, -17, -75, 49, 44, -78, 94, 21, 
        0, 35, -18, 83, 9, -42, 60, 93, 54, 20, 
        -49, 114, 106, -82, 113, -90, 86, -124, -73, -81, 
        90, 121, 115, 125, 47, 24, -28, 73, 56, -31, 
        8, 71, 122, 58, -33, 108, -111, 102, -118, -103, 
        -122, 88, 28, -76, 67, -115, -67, 78, 36, 117, 
        -8, -25, -97, 107, -91, -50, -53, -52, 111, -114, 
        -58, -128, 84, -98, 63, 74, 10, 41, -32, 126, 
        69, -68, 11, -119, -44, -39, -107, -40, 85, -87, 
        61, 91, -1, 50, -72, -117, 15, 55, -51, 43, 
        87, 105, 120, -88, 116, 80, -48, -123, -127, -105, 
        -22, 76, 109, 19, -46, -30, 112, 16, -10, 45, 
        -63, -47, 123, -106, 27, 38, 104, -70, -79, 18, 
        -99, -16, -85, -23, 30, -66, 48, -89, -61, -113, 
        -12, 51, -95, -15, 32, -9, 62, -38, 14, -45, 
        -80, 66, 100, 103, -104, -27, -43, 110, -83, -26, 
        -101, 46, -120, -54, 37, 42, 13, 75, 82, -109, 
        26, -94, -57, -64, 119, 53, 39, -13, -121, 33, 
        72, -126, -65, -36, -71, 118, -35, 92, 96, 89, 
        64, 34, -20, -96, 77, 40, 127, -21, 59, -55, 
        -102, 95, -3, 99, -59, -92
    };
    private static final byte MGBOX[] = {
        -14, -108, 90, 75, 15, 115, -38, -37, -125, 29, 
        -77, 9, -4, 54, -72, 70, 65, -44, -48, 85, 
        -13, -121, 118, -102, 40, 53, 113, -5, -9, 28, 
        3, 125, 21, -124, 10, 67, -6, -98, 96, -105, 
        -104, 126, -93, 82, -47, 41, -91, 89, -59, 122, 
        47, 37, -31, 59, 56, 12, -112, -58, -39, -10, 
        -40, -49, 22, -107, 33, -89, 109, 31, 88, 81, 
        72, 42, -66, -85, -15, 93, -101, -7, -128, -19, 
        -27, -90, -11, 111, 49, -70, 121, 79, -123, -127, 
        -79, 35, -28, 114, -22, 44, -54, 107, 106, 30, 
        92, 4, -43, -82, -78, -26, -61, 57, 77, 95, 
        58, 69, -76, 103, -56, 78, 26, -92, 48, -32, 
        -52, 16, -67, 51, -50, -73, -29, 52, -60, -118, 
        -1, -80, 63, 2, 124, -36, -65, 8, -33, -115, 
        -3, 108, -21, 18, 110, 36, -51, 46, -103, 94, 
        20, -114, 80, 127, -86, 19, -119, -113, 68, -25, 
        -120, -71, 32, 38, -95, -57, 5, 7, 105, -17, 
        -34, -81, 24, -74, -35, 100, 1, -46, -94, 43, 
        13, 17, -87, 11, -69, -62, -126, -63, -64, -23, 
        -97, 27, -18, -53, 84, 0, -106, -83, 39, 116, 
        91, 104, 14, -24, -42, 34, -88, -84, 62, 61, 
        -2, 112, 23, 119, 73, 6, -122, 55, -99, -41, 
        83, 99, 60, 87, 45, 120, -55, 117, -117, 98, 
        123, -8, 76, -16, -30, 64, -96, -109, -75, 25, 
        101, -110, 86, 50, 71, -12, 74, -100, -116, -68, 
        66, -20, -45, 102, -111, 97
    };

}
если же GameCrypt не используется то шифрование проходит по этим алгоритмам(могу ошибаться)
Клиент
Код:
package com.lameguard.crypt.impl;

import com.lameguard.crypt.LameCrypt;

public class L2C
    implements LameCrypt
{

    public L2C()
    {
        key = new byte[16];
    }

    public void setup(byte key[], byte iv[])
    {
        System.arraycopy(key, 0, this.key, 0, 16);
    }

    public void crypt(byte raw[], int offset, int size)
    {
        int temp = 0;
        int temp2 = 0;
        for(int i = 0; i < size; i++)
        {
            temp2 = raw[offset + i] & 0xff;
            raw[offset + i] = (byte)(temp2 ^ key[i & 0xf] ^ temp);
            temp = temp2;
        }

        int old = key[8] & 0xff;
        old |= key[9] << 8 & 0xff00;
        old |= key[10] << 16 & 0xff0000;
        old |= key[11] << 24 & 0xff000000;
        old += size;
        key[8] = (byte)(old & 0xff);
        key[9] = (byte)(old >> 8 & 0xff);
        key[10] = (byte)(old >> 16 & 0xff);
        key[11] = (byte)(old >> 24 & 0xff);
    }

    private byte key[];
}
...
DzumoHu4 вне форума   Ответить с цитированием