Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2014 16:38:06

Mouse
Зарегистрирован: 2014-03-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование RSA

Всем привет.
Помогите решить проблему шифрования 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))
Но что то все равно приходит пакет с “ошибкой авторизации”, подскажите правильно ли я шифрую RSA
если что скину любой кусок кода

Отредактировано Mouse (Март 30, 2014 12:40:17)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version