Archive

Kategorien

Zufallspassworte generieren

Dieses kleine Bashscript generiert Zufallspassworte beliebiger Länge und mit Vorgaben bei den erlaubten Zeichen. Dazu wird jeweils 1 Zeichen von /dev/urandom gelesen und geprüft ob es in den erlaubten oder verbotenen Zeichen enthalten ist. Solange das Zeichen verboten ist wird in einer zweiten Schleife ein neues Zeichen von /dev/urandom gelesen und wiederum geprüft. Das wiederholt sich solange bis die vorgegebene Länge erreicht ist, welche durch das erste (und einzige) Argument auf der Kommandozeile definiert wird.

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
#!/bin/bash

# loop count for length of string
counter=0
# defines the length of the string
if [ "x$1" != 'x' ] ; then
 end=$1
else
 end=16
fi
# if set to 1 ALL ASCII chars from dec 0 to dec 255 are used --> allowedChars is not honored, only deniedChars is applied if set to non-empty string
# if set to 0 only chars allowed by allowedChars and not forbidden by deniedChars are used
all=0

# there are different ways to specify allowed/denied chars
# char ranges and single chars can be combined
allowedChars='a-zA-Z0-9~!@#$%^&*_=)(/~?-'
allowedChars='a-z0-9A-Z'
# or named char classes
# http://www.computerhope.com/unix/utr.htm
#allowedChars='[:print:]'
deniedChars='[:blank:]'
# empty string menas no chars are forbidden
#deniedChars=''
if [ $all -eq 0 ] ; then
 # loop end-1 times
 while [ $counter -lt $end ] ; do
  # get a random byte from /dev/urandom and see if it's within allowed and not denied chars
  x="$(head -c 1 /dev/urandom | tr -dc "${allowedChars}" | tr -d "${deniedChars}")"
  # keep reading one byte while no allowed char
  while [ "x$x" = 'x' ] ; do
   x="$(head -c 1 /dev/urandom | tr -dc "${allowedChars}" | tr -d "${deniedChars}")"
  done
  counter=$(( $counter+1 ))
  # print the char
  echo -n "$x"
 done
else
 while [ $counter -lt $end ] ; do
  x="$(head -c 1 /dev/urandom | tr -d "${deniedChars}")"
  while [ "x$x" = 'x' ] ; do
   x="$(head -c 1 /dev/urandom | tr -d "${deniedChars}")"
  done
  counter=$(( $counter+1 ))
  echo -n "$x"
 done
fi

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

  

  

  

fifteen + 14 =

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .