Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.09.2018, 14:38
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Неправильное кодирование пароля
Добрый день.
Помогите с проблемой, есть функция входа на сайт на node.js
В базе данных пароль хранится в виде закодированного значения:

$00$4096$luxj+dLSpF18+cSHrVAZ/eOMG04=$cfe4b7788943eb4c2dab4fd88259f9ea691adf56

это пароль по дефолту, функция аутентификации приведена ниже:
Так вот сразу опишу проблему, не заходит с таким паролем, вернее с изначальным его видом, помогите расшифровать, разобрать функцию.
За ранее благодарен
function authxhr(a, h) {
    function q(f, e) {
        var d = new XMLHttpRequest;
        d.onreadystatechange = function() {
            if (d.readyState === XMLHttpRequest.DONE)
                if (200 === d.status) {
                    if (a.context) {
                        a.context.username = k;
                        a.context.salt = r;
                        a.context.iterations = t;
                        a.context.b = n;
                        a.context.storedKey = u;
                        var b = d.getResponseHeader("Authentication-Info");
                        if (b) {
                            var c = new z;
                            c.init(b);
                            if (b = c.a("sid")) a.context.h = b
                        }
                    }
                    h(null, d.response, {
                        storedKey: u
                    })
                } else if (2 == A) h({
                message: "Maximum authorization attempts reached"
            });
            else if (b = d.getResponseHeader("WWW-Authenticate"),
                c = b.split(" "), 2 > c.length) h({
                message: "Invalid authorization header"
            });
            else {
                c.slice(1).join(" ");
                c = new z;
                c.init(b);
                var e = c.a("realm"),
                    l = c.a("sr"),
                    m = c.a("ttl"),
                    v = c.a("data");
                b = c.a("sid");
                a.context && b && (a.context.h = b);
                a.context && l && (a.context.g = l, m && (a.context.m = parseInt(m) + Math.round((new Date).getTime() / 1E3)));
                v ? (p = c.headerValue, w = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(v)), c.init(w), x = c.a("r"), r = c.a("s"), t = c.a("i"), a.context && a.context.username != k && (a.context.username = null, a.context.salt =
                    null, a.context.iterations = null, a.context.b = null, a.context.l = null)) : p = 'SCRAM-SHA-1 realm="' + e + '"';
                B(function() {
                    if (v) {
                        var a = C();
                        a = p + ", data=" + btoa(a)
                    } else a = y(p);
                    A++;
                    q(f, a)
                })
            }
        };
        d.open(a.u || "GET", f);
        "undefined" != typeof e && d.setRequestHeader("Authorization", e);
        d.send()
    }

    function B(f) {
        a.context && a.context.b && a.context.username ? (k = a.context.username, n = a.context.b, f()) : k && l && r && t ? (n = CryptoJS.PBKDF2(l, CryptoJS.enc.Base64.parse(r), {
            keySize: 5,
            iterations: t
        }), f()) : function(f) {
            D(a.credentials) ? a.credentials(function(a,
                b) {
                f(a, b)
            }) : f(a.credentials.user, a.credentials.password)
        }(function(a, d) {
            k = a;
            l = d;
            f()
        })
    }

    function D(a) {
        return !!(a && a.constructor && a.call && a.apply)
    }

    function C() {
        var a = "c=biws,r=" + x,
            e = CryptoJS.HmacSHA1("Client Key", n);
        u = CryptoJS.SHA1(e);
        var d = m + "," + w + "," + a,
            b = CryptoJS.HmacSHA1(d, u),
            c = [];
        if (e.words.length > b.words.length)
            for (var g = 0; g < b.words.length; g++) c.push(e.words[g] ^ b.words[g]);
        else
            for (g = 0; g < e.words.length; g++) c.push(e.words[g] ^ b.words[g]);
        e = new CryptoJS.lib.WordArray.init(c);
        b = CryptoJS.HmacSHA1("Server Key",
            n);
        CryptoJS.HmacSHA1(d, b);
        return a + ",p=" + e.toString(CryptoJS.enc.Base64)
    }

    function y(a) {
        m = "n=" + k + ",r=fyko+d2lbbFgONRv9qkxdawL";
        return a + ", data=" + btoa("n,," + m)
    }

    function z() {
        this.init = function(a) {
            this.headerValue = a;
            this.f = this.headerValue.split(",")
        };
        this.a = function(a) {
            for (var e = null, d, b = 0; b < this.f.length; b++)
                if (d = this.f[b].trim(), 0 == d.indexOf(a + "=")) {
                    e = d.split(a + "=")[1];
                    break
                } return e
        }
    }
    if (!this instanceof authxhr) return new authxhr(a, h);
    if (a) {
        var A = 0,
            m, r, t, l, u, p = "SCRAM-SHA-1";
        if (a.context && a.context.g &&
            a.context.username && a.context.b) {
            var x = a.context.g;
            var n = a.context.b;
            var k = a.context.username;
            var w = "r=" + x + ",s=" + a.context.salt + ",i=" + a.context.iterations.toString();
            y();
            var E = C();
            q(a.uri, p + ", data=" + btoa(E))
        } else a.j ? B(function() {
            q(a.uri, y("SCRAM-SHA-1"))
        }) : q(a.uri)
    }
}
authxhr.createServerPassword = function(a) {
    var h = CryptoJS.lib.WordArray.random(20);
    a = CryptoJS.PBKDF2(a, h, {
        keySize: 5,
        iterations: 4096
    });
    a = CryptoJS.HmacSHA1("Client Key", a);
    a = CryptoJS.SHA1(a);
    return "$00$4096$" + h.toString(CryptoJS.enc.Base64) + "$" + a.toString(CryptoJS.enc.i)
};
window.authxhr = authxhr;
window.createserverpassword = authxhr.createServerPassword;
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2018, 13:44
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

похоже никто и не знает о чем речь)
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2018, 14:05
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

var d = new XMLHttpRequest();
Дальше не читал, сильна многа букав.
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2018, 15:11
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

razik, выложите лучше исходный код, не минимизированный.
Ответить с цитированием
  #5 (permalink)  
Старый 01.10.2018, 13:06
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Nexus,
был бы мой код, разработчик сие скрипта не отвечает, остался лишь этот код..
Ответить с цитированием
  #6 (permalink)  
Старый 01.10.2018, 14:47
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Сообщение от razik Посмотреть сообщение
Nexus,
был бы мой код, разработчик сие скрипта не отвечает, остался лишь этот код..
Да и кто либо из знающих навел бы хотябы на мысли, в чем может быть дело, у меня столько опыта нет чтобы понять , по сути скрипт рабочий, но вот данные не подходят, и не возможно войти в админ панель
Ответить с цитированием
  #7 (permalink)  
Старый 01.10.2018, 14:48
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Сообщение от Audaxviator Посмотреть сообщение
var d = new XMLHttpRequest();
Дальше не читал, сильна многа букав.
тут все печально с вашим комментом=) за что кандидата наук получили за флуд??))
Ответить с цитированием
  #8 (permalink)  
Старый 01.10.2018, 14:57
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

razik, попробуйте создать нового пользователя с точно известным паролем. После попробуйте авторизоваться с сохраненным паролем.
Если все ок, то... все ок, в противном случае сравнивайте какие данные идут в класс CryptoJS при создании пользователя и при авторизации.
Если эти данные разнятся, то авторизация пройдена никогда не будет.

Если же вам нужно просто расшифровать имеющуюся строку, то стоит поискать документацию к вашему классу "CryptoJS".
Если класс не шифрует данные, а высчитывает их hash, то получить изначальную строку может и не выйти.

Сообщение от razik
за что кандидата наук получили за флуд??))
Да
"Звания" за кол-во сообщений даются.
Ответить с цитированием
  #9 (permalink)  
Старый 01.10.2018, 15:14
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Прохвессорам надо бы знать, что обратно эту строку расшифровать не получится - хоть читай документацию, хоть нет. В коде использовано шифрование "в одну сторону".
Ответить с цитированием
  #10 (permalink)  
Старый 01.10.2018, 15:52
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Дополню, выскакивает ошибка при авторизации, когда вводишь npm start и уже сервис запущен, то после неудачной попытки входа выходит это сообщение:
validate nonce 'fyko+d2lbbFgONRv9qkxdawLB9kmopJY74YrWCQr2ke9MdiUDBzZtx3P95pM1GwWz4uQN5vkiMRcEHhxNoTI7EgX6g1PbA9/L0LxlaxV40'
nonce validation failed (2)
auth fail (3)


Сообщение от Audaxviator Посмотреть сообщение
Прохвессорам надо бы знать, что обратно эту строку расшифровать не получится - хоть читай документацию, хоть нет. В коде использовано шифрование "в одну сторону".
Я это понимаю, но вдруг проблема не в этом, вы поймите, скрипт должен работать, также как и возможно написать обратную функцию по этому алгоритму, а если еще проще , то вырезать все эти функции как вы назвали "в одну сторону" и добавить свою.
Но возможно проблема в мелочи какой нибудь.. даже не знаю;(
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка поля ввода пароля и его проверки средствами jquery IONEX jQuery 2 06.09.2015 18:35
смена пароля ElshStephan Элементы интерфейса 8 15.06.2015 13:59
Минимальная длинна пароля Mizter Egoist Элементы интерфейса 3 18.04.2014 16:38
Валидация Пароля и Email 203 Элементы интерфейса 4 26.05.2013 15:44
Как не дать пользователю ввести неправильное значение в текстовый инпут ? boraldo Events/DOM/Window 4 12.04.2012 15:43