Я пытаюсь написать нестандартный компонент контроллера для домашнего помощника. В настоящее время фондовый сайт написан в 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())
=)