Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2018, 18:58
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

Нужен алгоритм шифрования JS Client<->Server
В общем есть данные вида:

{"key":"1*0:0:0|0:25:0|0:50:0|0:75:0|0:0:25|1:25:25|0:50:25|0:75:25|0:0:50|1:25:50|1:50:50|0:75:50|0:0:75|0:25:75|0:50:75|0:75:75"}


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

То есть шифроваться на сервере и дешифроваться на клиенте, а после ввода пользовательских данных снова шифроваться на клиенте и потом дешифроваться на сервере.

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

Тут понятно, что нельзя использовать open_ssl и прочие библиотеки. Нужна какая-то простая логика кодирования, чтобы портировать ее на JS.
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2018, 02:29
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Гугли реализации AES на JS
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2018, 12:32
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

MallSerg, щас посмотрел несколько решений - говнокод унылый. У большинства не меняется вектор шифрования и первый конкатенационный хэш всегда статичен. При том, что на JS этот ключ шифрования у большинства транслируется в массив байтов и даже не поддерживает символы кроме HEX-DEC заявленная совместимость с open ssl в жопе.

У меня была идея сделать серверную генерацию ключа на 5 минут сроком актуальности, которая будет сдерживаться по JSON fetch и криптовать на клиенте капчу и декриптовать. Но c моим AES-CBC 256 это оказалось несовместимо, а у меня только вектор поменян и совсем нет конкатенующего паливного хэша.


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

А то эти мужики старые как говно мамонта и код у них такой же дряхлый.
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2018, 12:53
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

Кароче вот ... Добавляем порядок с алфавитными индексами на сервере и тасуем. На клиенте делаем sort(), что восстанавливает порядок массива.

let test = {"key":"1*G-0:50:25|B-0:25:0|C-0:50:0|D-0:75:0|E-0:0:25|F-1:25:25|H-0:75:25|I-0:0:50|J-1:25:50|K-1:50:50|L-0:75:50|M-0:0:75|N-0:25:75|O-0:50:75|P-0:75:75|A-0:0:0"};
		
		let pattern = test.key.split('*')[0];
		let coords	= test.key.split('*')[1].split('|');
		

		console.log(coords.sort()) // return order

		function compareRandom(a, b) {
		  return Math.random() - 0.5;
		}


		console.log(coords.sort(compareRandom)) // randomize


С учетом того, что капчедрочеры обычно считывают изображение мы имеем шанс не попасть под автоматизированный алгоритм вычисления капчи - ведь она отрисовывается canvas. Далее после ввода паттерна опять мы перетасовываем и отправляем на сервер который делает тоже самое.

Мне кажется лет на 10 этого алгоритма хватит.

Последний раз редактировалось xShift, 04.06.2018 в 12:57.
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2018, 13:02
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от xShift
Мне кажется лет на 10 этого алгоритма хватит.
сейчас нейронки капчи не хуже людей угадывают.
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2018, 14:03
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Можно как-то так:
var Shuffler = (function() {

	var joinReplaceCallback = function() {
		return Math.random() > 0.5 ? 'e' : 'f';
	};

	return {
		decode: function(array, key) {
			var tempArray = array.slice(); //copy source array

			array.splice(0, array.length); //clear source array
			key = key.split(/[ef]/);

			for(var i = 0, value; i !== key.length; i++) {
				value = parseInt(key[i], 14);
				array[value] = tempArray[i];
			}
		},
		encode: function(array) {
			var indexes = [],
				key = [],
				tempArray = array.slice(), //copy source array
				value;

			array.splice(0, array.length); //clear source array

			while(array.length !== tempArray.length) {
				value = Math.floor(Math.random() * tempArray.length);

				if(indexes.indexOf(value) === -1) {
					array.push(tempArray[value]);
					indexes.push(value);
					key.push(value.toString(14));
				}
			}

			return key.join('$').replace(/\$/g, joinReplaceCallback);
		}
	};

})();


var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

var secretKey = Shuffler.encode(array);

console.log(array, secretKey);

Shuffler.decode(array, secretKey);

console.log(array);
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2018, 15:46
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

ruslan_mart, неплохо я замешал все же на array sort. Только еще добавил римские цифры что парсить не хотели. Думаю еще сделать рандомизацию пути получения капчи по сессии. Тогда точно этого хватит.

А нейронки - да. Но хрумер уже с писькой во рту и этого пока достаточно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шарящий в JS, ты нужен мне! Кликандер Weks Работа 5 25.11.2016 19:59
нужен обратный отчет времени на JS на картинке okapo Работа 3 20.01.2012 17:46
нужен обратный отчет времени на JS на картинке okapo AJAX и COMET 2 20.01.2012 04:39
Нужен Adobe JS программист для разовой работы VitAl2013 Работа 3 01.06.2011 15:03
Нужен JS программер, Ростовская область Evgeny Работа 20 05.10.2010 09:22