Форум сайта python.su
Всем привет.
Помогите решить проблему шифрования RSA.
Вот так шифруется пакет:
Пакет дополнительно шифруется по алгоритму RSA. Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете Init. Вместе эти 3 части составляют целый RSA ключ.Ключ N получил, все норм (надеюсь), там код на С, но я переписал его на Python, было бы не плохо если бы кто проверил
void unscrambleMod( char *n ) { typedef unsigned char byte; int i; // step 4 xor last 0x40 bytes with first 0x40 bytes for( i=0; i<0x40; i++ ) { n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]); }; // step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38 for( i=0; i<4; i++ ) { n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]); }; // step 2 xor first 0x40 bytes with last 0x40 bytes for( i=0; i<0x40; i++ ) { n[i] = (byte)(n[i] ^ n[0x40 + i]); }; for( i=0; i<4; i++ ) { byte temp = n[0x00 + i]; n[0x00 + i] = n[0x4d + i]; n[0x4d + i] = temp; }; };
def decrypt_rsa_key(enc_key_n): n = bytearray(enc_key_n) for i in range(0x40): n[0x40 + i] ^= n[i] for i in range(4): n[0x0d + i] ^= n[0x34 + i] for i in range(0x40): n[i] ^= n[0x40 + i] for i in range(4): n[i], n[0x4d + i] = n[0x4d + i], n[i] return bytes2number(n)
Формат для ревизии 0xc621:Прочитав о РСА на вики понял что шифровать надо так:
00
00 00 00 00 … // Начало массива из 128 байт содержащих логин и пароль, и шифрующихся по алгоритму RSA
… (байты 94-107) // строка содержащая логин. Имеет длинну 14 байт и храниться в формате ASCII а не UNICODE !!!
… (байты 108-124) // строка содержащая пароль. Имеет длинну 16 байт и храниться в формате ASCII а не UNICODE !!!
… 00 00 00 00 // не используется. Конец массива
auth_data = struct.pack('<94x14s16s4x', ACCOUNT, PASSWORD) auth_data = number2bytes(pow(bytes2number(auth_data),65537, rsa_key_n))
Отредактировано Mouse (Март 30, 2014 12:40:17)
Офлайн