Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 01.10.2018, 15:53
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,724

Audaxviator, я не изучал код.
md5 тоже one way hash, однако с помощью радужных таблиц можно попытаться найти исходную строку.

Я обладаю поверхностными знаниями в криптографии, а "кандидат наук", "профессор", etc., как я и писал ранее, даются за кол-во сообщений на форуме. Глупо рассчитывать на то, что пользователь, имеющий один из вышеприведенных "статусов" будет действительно обладать соответствующими знаниями.

ps. Если я вас как-то задел, то прошу прощения, подобной цели у меня не было.

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

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

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


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

Сообщение от razik Посмотреть сообщение
Там пользователь вшифт в код скрипта, и есть возможность только работать с пользователем admin. Даже проверяется если не админ то ошибка.
попробовал менять пользователя,не помогло=)
Ответить с цитированием
  #14 (permalink)  
Старый 02.10.2018, 08:52
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Дайте пароль, который вы пишете в поле (ничего не обещаю).
Ответить с цитированием
  #15 (permalink)  
Старый 02.10.2018, 09:19
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

Сообщение от Audaxviator Посмотреть сообщение
Дайте пароль, который вы пишете в поле (ничего не обещаю).
Ну хоть 1 силы проверить решил, респект уже=) да я понимаю.

Пароль: SoftActivate
Ответить с цитированием
  #16 (permalink)  
Старый 02.10.2018, 11:00
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Нет, не работает (это было самое простое предположение).
Дело в том, что функция createServerPassword возвращает разные, случайные хеши. Не она преобразует пароль в хеш, который должен уйти на сервер и сравниться с тем, что в базе. Я убрал из неё этот кусок
var h = CryptoJS.lib.WordArray.random(20);
134
a = CryptoJS.PBKDF2(a, h, {
135
keySize: 5,
136
iterations: 4096
137
});
тогда она, понятно, возвращает один и тот же хеш вместо одной и той же строчки пароля, но - не тот.
А какая тогда функция это делает? Её тут, выходит, нет.
Короче, я сдаюсь (не начав).
Без контекста и сервера мне ничего не понятно.
Поправил какие-то синтаксические пустяки, но вряд ли это важно.

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.pa rse(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;
Ответить с цитированием
  #17 (permalink)  
Старый 02.10.2018, 21:05
Интересующийся
Отправить личное сообщение для razik Посмотреть профиль Найти все сообщения от razik
 
Регистрация: 14.09.2018
Сообщений: 21

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