Найти - Пользователи
Полная версия: Объясните назначение выражения в функции
Начало » Python для новичков » Объясните назначение выражения в функции
1 2
Mouse
Объясните что делает строка в функции и зачем


def xor_decrypt(data):
    key, = struct.unpack_from('I', data, len(data) - 8)
    data = bytearray(data)
    for i in reversed(range(4, len(data) - 8, 4)):
        dw, = struct.unpack_from('I', data, i)
        dw ^= key
        key = (key - dw) & 0xFFFFFFFF // что делается тут и зачем 
        data[i:i+4] = struct.pack('I', dw)
    return bytes(data)

Назначение функции я знаю, где взять ключ тоже…
alexsis
Это операция побитового умножения.
py.user.next
Mouse
что делается тут и зачем
каждая F в двоичной системе равна 1111
следовательно, FFFFFFFFh == 11111111111111111111111111111111b
а 11111111111111111111111111111111b == …00000011111111111111111111111111111111b

то есть при & младшие 24 бита сохраняют свои значения, а более старшие биты обнуляются
Mouse
py.user.next
И зачем это сделано в данном случае??))
У меня задача принять пакет, расшифровать его статичным ключем blowfish потом расшифровать его XOR-ом ключ которого передается в пакете (4 последних байта) потом отправить пакет зашифрованный новым ключем blowfish (который будет в пакете) + этот пакет зашифровать RSA ( по которому у меня вопрос ниже))

…Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете
Я так понял что B=размер ключа,E= открытая экспонента…
Что бы зашифровать этот пакет мне надо - взять сумму байт сообщения, возвести в степень E= 65537 и
поделить по модулю N= передается в 1 пакете.

Например :
если b'aaaaaa' = 107070873493857
значит шифровать так : pow(107070873493857,65537)%N
Я правильно понял?))
П.с. только учу программирование
JOHN_16
Mouse
И зачем это сделано в данном случае??))
Mouse
потом расшифровать его XOR-ом ключ
Mouse
выучите что такое битовые операции, в частности AND, OR, XOR.

И да меня всегда впечатляли задачи из разряда “вот гайка вот болт соберите синхрофазатрон”. Учится постепенно надо, постигать азы, нарабатывать базу, а потом браться за задачи
py.user.next
Mouse
И зачем это сделано в данном случае??))
ну, там, походу, получается отрицательное число, а в отрицательных числах слева идут единицы до бесконечности
вот, чтобы их убрать, применяется такое отсечение
Mouse
Спасибо всем, а насчет RSA вы мне ответите ?
Singularity
JOHN_16
вот гайка вот болт соберите синхрофазатрон
Боль и страдания тоже ок.
Mouse
JOHN_16
И да меня всегда впечатляли задачи из разряда “вот гайка вот болт соберите синхрофазатрон”. Учится постепенно надо, постигать азы, нарабатывать базу, а потом браться за задачи
Я все равно нечего не пойму пока сам не сделаю, мне так учиться проще
sergeek
Mouse
Я правильно понял?))
правильно, деление по модулю в pow можно вставлять, оно быстрее

pow(107070873493857,65537, N)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB