Перепишите JS (crypto JS) в python (PyCryptoDome) аутентификацию - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь написать нестандартный компонент контроллера для домашнего помощника. В настоящее время фондовый сайт написан в JavaScript. На сайте установлено sh подключение веб-сокета к контроллеру. Первым отправленным запросом является простой логин с именем пользователя. После этого контроллер (сервер) возвращает сессионную соль. Затем дайджест рассчитывается и отправляется обратно. Дайджест рассчитывается по следующему коду:

var e = a("crypto-js");
getDigestFromPasswordHash: function(password_hash, session_salt) {
        var c = e.algo.SHA1.create();
        c.update(e.enc.Utf8.parse(password_hash)),  c.update(e.enc.Base64.parse(session_salt));
        var d = c.finalize();
        return d.toString(e.enc.Base64)

в моем случае:

if password_hash = "xcumcIbNbIplmkjMy4edsIuaX3FtUB0uPq+pMAksomk=" 
and session_salt = "mC6rj43I+WqyJ8z1Uk2R17HoF2L=" 
then function returns this "pl5sO2CcKz19gOWh6Ijou0w7oqc="

Я пробовал то же самое с python и pycryptodome

from Crypto.Hash import SHA1
import base64

password_hash = "xcumcIbNbIplmkjMy4edsIuaX3FtUB0uPq+pMAksomk="
session_salt = "mC6rj43I+WqyJ8z1Uk2R17HoF2L="

c = SHA1.new()
c.update(password_hash.encode("utf-8"))
c.update(base64.b64encode(session_salt.encode()))

a = base64.b64encode((c.digest()))
print(a.decode())

, но не могу получить тот же вывод. Мой код python возвращает "uhweGgQzlCdjtcSTr + chEzjuvpU =". Также, если я пытаюсь отправить это обратно в правильно отформатированном пакете, я получаю ответ, что пароль неверен.

Есть ли разница в заполнении или что-то еще, чего я не вижу? Буду очень признателен за помощь =)


ОБНОВЛЕНИЕ

Мне удалось решить эту загадку. Я делал кодировку base64 вместо декодирование

Фрагмент рабочего кода

from Crypto.Hash import SHA1
import base64

password_hash = "xcumcIbNbIplmkjMy4edsIuaX3FtUB0uPq+pMAksomk="
session_salt = "mC6rj43I+WqyJ8z1Uk2R17HoF2L="

c = SHA1.new()
c.update(password_hash.encode("utf-8"))
c.update(base64.b64decode(session_salt))

a = base64.b64encode((c.digest()))
print(a.decode())

=)

...