Генерация пароля с помощью JavaScript

Генерация пароля с помощью JavaScript

Наткнулся на интересное решение для генерации случайного пароля с помощью JavaScript. Код очень короткий и простой, он мне настолько понравился, что я решил написать про него небольшую статейку. Расписывать тут особо нечего, вся генерация сводится к одной строке:
Math.random().toString(36).slice(-8);
На этом можно закончить, но получилось совсем короткая запись, даже по меркам twitter`a. Поэтому добавлю пояснение и еще один вариант генерации.

Простая генерация пароля с помощью JavaScript

Для начала попробуем разобраться, как работает эта короткая строка. Первая часть кода Math.random() генерирует случайное число от 0(включительно) до 1(не включительно), то есть создается произвольное число с большим количеством знаков после запятой, например: 0.7642436524728753. Далее с помощью метода toString(36), полученное длинное число, переводится в строку. Самое интересное, что при переводе можно указывать основание системы счисления, которая будет использоваться при переводе числа. Таким образом, число превращается в набор символов и чисел, получится что-то подобное: 0.rigjv73pl7. И в конце с помощью метода slice() отрезается нужное количество символов. Если методу передать один отрицательный параметр, то отсчет символов будет с конца.
Когда все стало понятно, также стали очевидны и недостатки кода. Максимальное количество символов, которое может содержать пароль, это 10-11 штук. Также есть очень маленькая, даже практически невозможная, возможность получить ошибку. Ошибка произойдет, когда сгенерируется число 0, без длинного хвоста или когда сгенерируется 0.5 – такой вариант тоже возможен. Но эти недостатки ни сколько не принижают эстетическую красоту кода генерации пароля в одну строку:

var randomstring = Math.random().toString(36).slice(-8);

Можно оформить код в небольшую функцию, которая будет генерировать пароль с заданым количеством символов:

function gen_password(len){
	if(len > 10) len = 10;
	len = len * (-1);
	return Math.random().toString(36).slice(len);
}

Второй вариант генерации пароля в JavaScript

Бывает необходимость генерировать пароли длиннее 10 символов, а также иногда необходимо использовать в пароле не только буквы и цифры, а еще и другие случайные символы. Для таких случаев можно воспользоваться этим способом:

function gen_password(len){
	var password = "";
	var symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!№;%:?*()_+=";
	for (var i = 0; i < len; i++){
		password += symbols.charAt(Math.floor(Math.random() * symbols.length));		
	}
	return password;
}

Послесловие

Когда дописал статью, вспомнил, что на блоге уже есть подобная функция, только написана она на php: почитать.
Спасибо за внимание, пишите красивый код!
P.S. Если не получается красивое решение, то пишите красивые костыли…

Рассказать друзьям:


Оценить:
(7 оценок, среднее: 4,43 из 5)

Генерация пароля с помощью JavaScript: 1 комментарий

  1. К сожалению использование Math.random не может считаться безопасным способом создания случайных чисел т. к. его алгоритм предсказуем и уже устарел. Об этом также написано на MDN https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/random

    Для генерации пароля рекомендую использовать приптографически стойкие генераторы. Например passfather https://www.npmjs.com/package/passfather

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code