Я пытаюсь подключиться к серверу VNC (Vino) с использованием аутентификации VNC.Читая RFC 6143 - Remote Framebuffer Protocol, мы можем увидеть, как работает аутентификация VNC.
Используется протокол запроса-ответа, при котором сервер отправляет запрос в 16 байтов, а клиент отвечает запросом, зашифрованным его ключом.Шифрование использует алгоритм DES.
Использование TigerVNC и Wireshark Я прослушал этот процесс, чтобы выполнить этот процесс с Python.
Например,
Это трафик, который японюхал Wireshark между Vino и TigerVNC.Это работает.
Server Client
|------------------ Server protocol version: 003.007 ----------------->|
|<----------------- Client protocol version: 003.007 --------------|
|------------------ Security types: 2 --------------------->|
|<----------------- Security type selected: VNC (2) ------------------|
|------------------- Authentication result: OK --------->|
|----- Authentication challenge: b4a7257a443426527dd9d987fa6b099f ----->|
|<---- Authentication response: 4838c102d8cbb1decd38ecdbec533bc7 ------|
Задачей и ответом являются байты, а не шестнадцатеричные строки.
Но когда я шифрую запрос аутентификации с помощью Python Я получил разные результаты.Я попытался использовать режим операций с блочным шифром различных операций, но безуспешно.
Например
>>> from pydes import des
>>> challenge = "\xb4\xa7\x25\x7a\x44\x34\x26\x52\x7d\xd9\xd9\x87\xfa\x6b\x09\x9f"
>>> key = "testingg"
>>> d = des()
>>> ciphered = d.encrypt(key,challenge,padding=True)
>>> import binascii
>>> ciphered = d.encrypt(key,challenge)
>>> binascii.hexlify(ciphered)
'4f16bc072bf34903e753b3f968b1aa56'
Или с другим модулем Python:
>>> import pyDes
>>> des = pyDes.des("testingg")
>>> challenge = "\xb4\xa7\x25\x7a\x44\x34\x26\x52\x7d\xd9\xd9\x87\xfa\x6b\x09\x9f"
>>> e = des.encrypt(challenge)
>>> binascii.hexlify(e)
'4f16bc072bf34903e753b3f968b1aa56'
>>> binascii.hexlify(des.decrypt(e))
'b4a7257a443426527dd9d987fa6b099f'
Я что-то упустил?В RFC ничего не говорится о режимах шифрования или векторах IV.
Более того, у меня есть исходный код TigerVNC, написанный на Java, и я не хочу иметь ничего особенного в этом вызове.шифрование.