способы кодирования текста

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

просьба не предлагать цезаря и Base64 - уж больно широко известные.
Изменен:31 июл 2018 12:15
 
 
Сообщения:24
Обычно же соленый хеш пароля хранят, а не сам пароль и уже во время аутентификации сравнивают только хеши, а не пароли. Такой вариант разве не подойдет? По соленому хешу пароль подобрать очень трудоемко и в базе пароль не будет храниться вообще.
Изменен:31 июл 2018 15:06
 
 
Сообщения:938
короче там костыль для доступа к виндовс шер. обычные пользователи получают нормальный доступ через свою учётку, а левые через специального юзера. делают пустого юзера, отбирают у него все права и чужие юзеры получают специальный линк, в котором прописаны данные этого юзера.
единственный минус - в конце нужны имя и пароль прямым текстом.
костыль старый, редко используемый и в прямых руках безопасный. а проблема с паролем по большей части декоративная.
 
 
Сообщения:938
с утра мозги остыли, погуглил, поприкидывал и получил довольно элегантный способ кодирования.


		String user = "Света";
		String pass = "Zuzfsefgyxzgfd";
		
		byte[] buser = user.getBytes(Charset.forName("UTF-8"));
		byte[] bpass = pass.getBytes(Charset.forName("UTF-8"));
		byte[] result = new byte[bpass.length];
		
		for (int i = 0, j = 0; i < bpass.length; i++, j = (j + 1) % buser.length)
		{
			result[i] = (byte)( bpass[i] + buser[j] );
		}
		
		Encoder encoder = Base64.getUrlEncoder();
		String str_result = encoder.encodeToString(result);
		str_result = str_result.replaceAll("=", "");
		
		System.out.println(str_result);

        //---------------------------------------------------------
				
		Decoder decoder = Base64.getUrlDecoder();
		byte[] b_pass_recieved = decoder.decode(str_result);
		byte[] b_pass_remade = new byte[b_pass_recieved.length];
		
		for (int i = 0, j = 0; i < b_pass_recieved.length; i++, j = (j + 1) % buser.length)
		{
			b_pass_remade[i] = (byte)( b_pass_recieved[i] - buser[j] );
		}
		
		System.out.println(new String(b_pass_remade, Charset.forName("UTF-8")));
Изменен:01 авг 2018 08:38
 
 
Сообщения:24
Наверно пойдет, но можно еще какое-нибудь значение в ключ к имени пользователя добавить не из базы и взять хэш, чтобы, если база утечет, сложнее дешифровать было.
Изменен:01 авг 2018 12:20
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет