Я как и многие активные интернет-юзеры зарегистрирован на множестве различных интернет сервисах, форумах. И время от времени регистрируюсь в новых. В каждой учетной записи свой, уникальный пароль. Обычно 8-16 символов. Хранить эти пароли не проблема. Проблема каждый раз придумывать новый. :) Можно, конечно, обойтись одним на все случаи жизни. Но если его спалят (или сам его спалю) последствия могут быть плачевны :)
К счастью, мучения с придумыванием паролей больше не повторятся :) Cлучайно набрел на описание отличного генератора паролей Pwgen. Это полностью открытый, отвечающий самым высоким требованиям безопасности, генератор паролей. Pwgen очень простой в использовании и очень сложный в дешифровке. Как я раньше про него не узнал ума не приложу. Видимо специально не искал.
Компилировать pwgen не понадобилось. Он есть в репозиториях ubuntu.
Устанавливаем командой sudo aptitude install pwgen
После установки приступаем к сложнейшей операции генерирования пароля. Генерация происходит посредством ввода в консоль команды pwgen
Честно говоря, я думал что пароль будет один. В описании на буржусайте не было сказано что такая маленькая програмулина сгенерирует нехилый такой список паролей из 20 строк:

1
2
3
4
torin@kubuntu:~$ pwgen
Chiem3Ke Yee1ahdu Cei1Tae4 ohCoos3k EuC3guy9 iFichi1L Ee0ephee wo8ieX0i
ohRah5po eiW6faiK shooH6Ph phohVei6 quozae4S eoTheil4 eez9aiTa lah3Ahdi
In0eiquo siemoK6d Aeleeng9 Yajaiph4 oog3Yola meeK6eiw ieS5seeY Ib6Pu7ph

Параноики могут еще больше засекретить пароль складывая два случайно выбранных пароля из разных строк. Либо за середину брать один. А за начало и окончание брать выбранные наугад пароли.. В общем, вариантов поизвращатся тут множество.
Кстати, интересно. Кто каким способом придумывает пароли?

Что еще можно почитать:

14 комментариев на запись “Простой генератор сложных паролей”

  1. Dmitry пишет:

    В свое время тоже ставил всякие проги для генерации паролей, сейчас поступаю проще: беру листок бумаги и пишу на нем случайную последовательность прописных, строчных букв и цифр. Уже привык, практически не напрягает так делать.
    С точки зрения “чистой криптографии” последовательности, наверное, получаются псевдослучайными… Но да фиг с ним, это по любому пароли не из разряда 123456 или qwerty123.

  2. Чеширский Кот пишет:

    Генератор по моему удобнее.Все таки составляя сам,можно и напутать да и если нужно много паролей,генератор сделает все достаточно быстро.

  3. Андрей пишет:

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

  4. Beard пишет:

    Я в качестве пароля использую номер своего авто… Правда, этого авто уже давно нет, но пароль остался :))) Еще хорошие пароли - химические формулы например:C2H5OH - практически, невозможно забыть.

  5. Vladimir пишет:

    Обычно иду сюда и выбираю пароль. Такой забрутфорсить будет тяжеловато :-)

    Ну или

    1
    
    base64 -w 64 /dev/urandom | head -n 1
  6. Sergey пишет:

    А я проще придумываю пароли . Беру русское мaтepнoe выражение и пишу его в английской раскладке без всяких пробелов . Желательно чтобы в выражении было много Ы Й Ё .Получается суперпароль .

  7. Konstantin пишет:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    #!/bin/bash
    # Password generators
     
    # Simple alphabetic password making function
    function mkpw() { head /dev/urandom | uuencode -m - | sed -n 2p | cut -c1-${1:-8}; }
     
    function mkpw_md5() {	# Hex password making function via MD5 hashing
     
    	# random + Year + Month + Day + Hour + Minute + Second + Nanoseconds
     	local s=$(head /dev/urandom)$(date +%Y%m%d%H%M%S%N)
     	echo $s | md5sum | cut -c1-${1:-8};
    }
     
    function mkpw_md5_alpha() {	# Alphabetic password making function via MD5 hashing
     
    	# random + Year + Month + Day + Hour + Minute + Second + Nanoseconds
     	local s=$(head /dev/urandom)$(date +%Y%m%d%H%M%S%N)
     	echo $s | md5sum | uuencode -m -| sed -n 2p | cut -c3-43 | cut -c1-${1:-8};
    }
     
    function mkpw_sha1() {	# Hex password making function via SHA1 hashing
     
    	# random + Year + Month + Day + Hour + Minute + Second + Nanoseconds
     	local s=$(head /dev/urandom)$(date +%Y%m%d%H%M%S%N)
     	echo $s | sha1sum | cut -c1-${1:-8};
    }
     
    function mkpw_sha1_alpha() {	# Alphabetic password making function via SHA1 hashing
     
    	# random + Year + Month + Day + Hour + Minute + Second + Nanoseconds
     	local s=$(head /dev/urandom)$(date +%Y%m%d%H%M%S%N)
     	echo $s | sha1sum | uuencode -m -| sed -n 2p | cut -c3-43 | cut -c1-${1:-8};
     
    }
     
    # Вот этот текст вставьте в файл ~/.bashrc и перезапустите bash
  8. Konstantin пишет:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    #!/usr/bin/perl -w
    # Perl version of mkpw_md5_alpha
    # Call this by /usr/bin/perl mkpw_md5_alpha.pl --length=integer \$length, # Password length
      						"count=i" => \$cnt); # Number of hash feedback-cycles
     
    	open(DATE, "date +%Y%m%d |"); $theDate = ; close(DATE);
    	$adate = int($theDate);		# Generate Year-Month-Day variable signature
     
    	open(DATE, "date +%H%M%S |"); $theDate = ; close(DATE);
    	$bdate = int($theDate);		# Generate Hour-Min-Sec variable signature
     
    	open(DATE, "date +%N |"); $theDate = ; close(DATE);
    	$cdate = int($theDate);		# Generate Nanoseconds variable signature
     
    	$xdate = $adate ^ $bdate ^ $cdate; $pdate = pack("a", $xdate);	# Combinate signatures by xor
     
    	open(RNG, "head /dev/urandom |"); $sx=; close(RNG);
    	$sx = $sx.$pdate;		# Get random generator concatenated with signatures combination
     
    	while ($cnt > 1) {		# Process MD5 feedback cycles
     
    		$cnt = $cnt - 1;
    		$sx = md5($sx);
     
    	}
     
    	$sx = md5_hex($sx);		# Last MD5 cycle
     
    	# Get substring from base64 encoded random
    	open(PWD, "echo $sx | uuencode -m -| sed -n 2p | cut -c3-43 |"); $sx=; close(PWD);
     
    	$pass = substr($sx, 1, $length);	# Limit password length and print it
    	printf("%s\n", $pass);
  9. Konstantin пишет:

    Можно улучшить стойкость пароля из предыдущего примера:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    #!/usr/bin/perl -w
    # Perl version of mkpw_md5_alpha
    # Call this by /usr/bin/perl mkpw_md5_alpha.pl [--length=integer \$length, # Password length
      						"cycles=i" => \$cycles); # Number of hash feedback-cycles
     
    	#open(DATE, "date +%Y%m%d |"); $theDate = ; close(DATE);
    	#$ddate = int($theDate);		# Generate Year-Month-Day variable signature
     
    	# YY-MM-DD date
    	$hyear = int(strftime "%y", localtime);
    	$hmonth = int(strftime "%m", localtime);
    	$hday = int(strftime "%d", localtime);
    	$ddate = 365 * $hyear + 30 * $hmonth + $hday;	# Pseudo-day normalized date signature
     
    	#open(DATE, "date +%H%M%S |"); $theDate = ; close(DATE);
    	#$bdate = int($theDate);		# Generate Hour-Min-Sec variable signature
     
    	# HH:MM:SS date
    	$hhour = int(strftime "%H", localtime);
    	$hmin = int(strftime "%M", localtime);
    	$hsec = int(strftime "%S", localtime);
    	$tdate = 3600 * $hhour + 60 * $hmin + $hsec;	# Second normalized time signature
     
    	open(DATE, "date +%N |"); $theDate = ; close(DATE);
    	$nsdate = int($theDate);		# Nanosecond normalized time
     
    	$xdate = $ddate ^ $tdate ^ $nsdate;		# Combinate signatures by xor
    	$pdate = pack("a", $xdate);						# Pack signature to a string
     
    	open(RNG, "head /dev/urandom |"); $sx=; close(RNG);
    	$sx = $sx.$pdate;		# Get random generator concatenated with signatures combination
     
    	while ($cycles > 1) {		# Process MD5 feedback cycles
     
    		$cycles = $cycles - 1;
    		$sx = md5($sx);
     
    	}
     
    	$sx = encode_base64(md5($sx));		# Convert result of last MD5 cycle to Base64
    	$sx = substr($sx, 0, 16);		# Cut control symbols in tail
     
    	# Get substring from base64 encoded random
    	#open(PWD, "echo $sx | uuencode -m -| sed -n 2p | cut -c3-43 |"); $sx=; close(PWD);
     
    	printf("%s\n", substr($sx, 0, $length));	# Limit password length and print password
  10. Konstantin пишет:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    #!/usr/bin/perl -w
    # Perl version of mkpw_md5_alpha
    # Call this by /usr/bin/perl mkpw_md5_alpha.pl [--length=integer \$length, # Password length
      						"cycles=i" => \$cycles); # Number of hash feedback-cycles
     
    	#open(DATE, "date +%Y%m%d |"); $theDate = ; close(DATE);
    	#$ddate = int($theDate);		# Generate Year-Month-Day variable signature
     
    	# YY-MM-DD date
    	$hyear = int(strftime "%y", localtime);
    	$hmonth = int(strftime "%m", localtime);
    	$hday = int(strftime "%d", localtime);
    	$ddate = 365 * $hyear + 30 * $hmonth + $hday;	# Pseudo-day normalized date signature
     
    	#open(DATE, "date +%H%M%S |"); $theDate = ; close(DATE);
    	#$bdate = int($theDate);		# Generate Hour-Min-Sec variable signature
     
    	# HH:MM:SS date
    	$hhour = int(strftime "%H", localtime);
    	$hmin = int(strftime "%M", localtime);
    	$hsec = int(strftime "%S", localtime);
    	$tdate = 3600 * $hhour + 60 * $hmin + $hsec;	# Second normalized time signature
     
    	open(DATE, "date +%N |"); $theDate = ; close(DATE);
    	$nsdate = int($theDate);		# Nanosecond normalized time
     
    	$xdate = $ddate ^ $tdate ^ $nsdate;		# Combinate signatures by xor
    	$pdate = pack("a", $xdate);						# Pack signature to a string
     
    	open(RNG, "head /dev/urandom |"); $sx=; close(RNG);
    	$sx = $sx.$pdate;		# Get random generator concatenated with signatures combination
     
    	while ($cycles > 1) {		# Process MD5 feedback cycles
     
    		$cycles = $cycles - 1;
    		$sx = md5($sx);
     
    	}
     
    	$sx = encode_base64(md5($sx));		# Convert result of last MD5 cycle to Base64
    	$sx = substr($sx, 0, 16);		# Cut control symbols in tail
     
    	# Get substring from base64 encoded random
    	#open(PWD, "echo $sx | uuencode -m -| sed -n 2p | cut -c3-43 |"); $sx=; close(PWD);
     
    	printf("%s\n", substr($sx, 0, $length));	# Limit password length and print password
  11. Konstantin пишет:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    #!/usr/bin/perl -w
    # Perl version of mkpw_md5_alpha
    # Call this by /usr/bin/perl mkpw_md5_alpha.pl [--length=integer \$length, # Password length
      						"cycles=i" => \$cycles); # Number of hash feedback-cycles
     
    	open(RNG, "head /dev/urandom |"); $sx=; close(RNG);
    	$pdate = hdate();
    	$sx = $sx.$pdate;		# Get random generator concatenated with signatures combination
     
    	while ($cycles > 1) {		# Process MD5 feedback cycles
     
    		$cycles = $cycles - 1;
    		$sx = md5($sx);
     
    	}
     
    	$sx = encode_base64(md5($sx));		# Convert result of last MD5 cycle to Base64
    	$sx = substr($sx, 0, 16);		# Cut control symbols in tail
     
    	# Get substring from base64 encoded random
    	#open(PWD, "echo $sx | uuencode -m -| sed -n 2p | cut -c3-43 |"); $sx=; close(PWD);
     
    	printf("%s\n", substr($sx, 0, $length));	# Limit password length and print password
     
    	sub hdate
    	{
    		my ($theDate, $hyear, $hmonth, $hday, $ddate,
    									$hhour, $hmin, $hsec, %tdate,
    									$hns, $nsdate, $xdate, $pdate, $sx, $sy, $pass);
     
    		# YY-MM-DD date
    		$hyear = int(strftime "%y", localtime);
    		$hmonth = int(strftime "%m", localtime);
    		$hday = int(strftime "%d", localtime);
    		$ddate = 365 * $hyear + 30 * $hmonth + $hday;	# Pseudo-day normalized date signature
     
    		# HH:MM:SS date
    		$hhour = int(strftime "%H", localtime);
    		$hmin = int(strftime "%M", localtime);
    		$hsec = int(strftime "%S", localtime);
    		$tdate = 3600 * $hhour + 60 * $hmin + $hsec;	# Second normalized time signature
     
    		open(DATE, "date +%N |"); $theDate = ; close(DATE);
    		$nsdate = int($theDate);		# Nanosecond normalized time
     
    		$xdate = $ddate ^ $tdate ^ $nsdate;		# Combinate signatures by xor
    		$pdate = pack("a", $xdate);						# Pack signature to a string
    	  return $pdate;
    	}
  12. Debian_User пишет:

    Pwgen — крут.
    Но вот интересная ссылочка:
    http://password.nanohertz.net
    Это генератор паролей.
    Но не просто паролей, а удобных для запоминания паролей.
    Пароли по звучанию похожи на слова.

    В общем полезная и рабочая вещь.

  13. пернамбуко пишет:

    А чем плох KeePass?

  14. -torin- пишет:

    Тем что для работы KeePass необходим Mono :)
    А вообще, KeePass выходит за рамки просто “генератора паролей”

Ваш комментарий к статье