Неправильное кодирование пароля
Добрый день.
Помогите с проблемой, есть функция входа на сайт на 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; |
похоже никто и не знает о чем речь)
|
var d = new XMLHttpRequest();
Дальше не читал, сильна многа букав. |
razik, выложите лучше исходный код, не минимизированный.
|
Nexus,
был бы мой код, разработчик сие скрипта не отвечает, остался лишь этот код.. |
Цитата:
|
Цитата:
|
razik, попробуйте создать нового пользователя с точно известным паролем. После попробуйте авторизоваться с сохраненным паролем.
Если все ок, то... все ок, в противном случае сравнивайте какие данные идут в класс CryptoJS при создании пользователя и при авторизации. Если эти данные разнятся, то авторизация пройдена никогда не будет. Если же вам нужно просто расшифровать имеющуюся строку, то стоит поискать документацию к вашему классу "CryptoJS". Если класс не шифрует данные, а высчитывает их hash, то получить изначальную строку может и не выйти. Цитата:
"Звания" за кол-во сообщений даются. |
Прохвессорам надо бы знать, что обратно эту строку расшифровать не получится - хоть читай документацию, хоть нет. В коде использовано шифрование "в одну сторону".
|
Дополню, выскакивает ошибка при авторизации, когда вводишь npm start и уже сервис запущен, то после неудачной попытки входа выходит это сообщение:
validate nonce 'fyko+d2lbbFgONRv9qkxdawLB9kmopJY74YrWCQr2ke9MdiUDBzZtx3P95pM1GwWz4uQN5vkiMRcEHhxNoTI7EgX6g1PbA9/L0LxlaxV40' nonce validation failed (2) auth fail (3) Цитата:
Но возможно проблема в мелочи какой нибудь.. даже не знаю;( |
Часовой пояс GMT +3, время: 02:35. |