shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] string aleatoria com 6 caracteres


From: .:::: Marcio ::::.
Subject: Re: [shell-script] string aleatoria com 6 caracteres
Date: Mon, 31 Jan 2005 14:43:26 -0200

Em Sun, 30 Jan 2005 14:37:32 -0200
"Eric Anderson" <address@hidden> digitou:
Sobre: [shell-script] string aleatoria com 6 caracteres

> 
>     preciso criar uma (67) string (s) aleatorias(2) -
sao senhas. 
>     
>     o melhor comando do bash (linux) pra isso eh o
random mesmo?
> 
>     sds
> 
>     Eric Anderson
>     CPD Via Net SAO
>     11-66432800
> 
> 

Oi Eric,

        Fiz um script awk, clone do utilitário mkpasswd, que
pode
ser usado para este fim.

        Ex.:

                $ awk -f mkpasswd.awk -l60 -s0
        
fpckfegF0vrut3jpmbtldgldsplhnfnpdlTnftlvrdeuoujcxegstk
cfoufc


        ...script:


#!/bin/awk -f

# mkpasswd.awk --- Um clone do mkpasswd do pacote
Expect
#
# Márcio Mendonça <address@hidden> 
# 20-jun-2004
# 
# 21-jun-2004:
#    Incuída duas linhas de código na função 'aleat()'
para 
# se  evitar  seqüências  repeditas  ('rr', 'xxx',
'aa') na 
# geração da string aleatória.
#
#    Não repete números quando a quantidade de números
soli
# citada for igual ou inferior a dez.
#
#    Evita seqüências de letras maiúsculas repetidas.
#
# 25-jun-2004:
#       Corrigido o problema de substituir um caractere
maiúsculo
# ou um número por um simbolo especial, que resultava
em um
# caractere ou dígito a menos do que o solicitado.
#
#       Criada função errmsg2() para erros de parâmetros.
#

# 'errmsg()' --- Emite uma mensagem de uso do script e
retorna 1.
                        function errmsg()
                        {
                                print "usage: awk -f mkpasswd.awk
[args]" > "/dev/stderr"
                                print "  where arguments are:" >
"/dev/stderr"
                                printf "  -l #\t(length of password,
default = 9)\n\
                          -d #\t(min # of digits, default = 2)\n\
                          -c #\t(min # of lowercase chars, default =
2)\n\
                          -C #\t(min # of uppercase chars, default =
2)\n\
                          -s #\t(min # of special chars, default =
1)\n " > "/dev/stderr"
                                exit 1
                        }

# 'errmsg2()' --- Uma segunda mensagem de erro.
                        function errmsg2(arg)
                        {
                                printf "passwd: bad argument %s:
unknown option\n", arg > "/dev/stderr"
                                exit 1
                        }

# aleat()  --- Gera uma string aleatória
                        function aleat(quant,           lower, lower_vet, 
aleato,
aleatos)
                        {
                                lower = "abcdefghijklmnopqrstuvwyxz"
                                split(lower, lower_vet, "")
                                
                                        for(i = 1; i <= quant; i++){
                                                aleatos = lower_vet[int(rand()
* 25) + 1]

                                                # Evitando seqüências repetidas
de caracteres para
                                                # geração de senhas melhores.
                                                while(aleatos == substr(aleato,
length(aleato)))
                                                        aleatos = 
lower_vet[int(rand()
* 25) + 1]
                                                
                                                aleato = (aleato aleatos)
                                        }

                                return aleato
                        }

                        BEGIN\
                        {
                                srand()

                                def_len = 9
                                def_up = def_di = 2
                                def_sp = 1

                                lower = "abcdefghijklmnopqrstuvwyxz"
                                upper = toupper(lower)
                                digit = "0123456789"
                                special =
"|,.;/<>:?][}{'`^~!@#$%&*-_+="

                                # Verificando a existências de opções
na linha de comandos...
                                if(ARGC > 1)
                                        for(i = 1; i <= (ARGC - 1); i++)
                                                if(ARGV[i] !~ /^-/){
                                                        user = ARGV[i]
                                                        ARGV[i] = ""
                                                }
                                                else {
                                                        op[i] = substr(ARGV[i], 
2)
                                                        ARGV[i] = ""
                                                }

                                # Recolhendo os parâmetros das
opções...
                                for(o in op){
                                        if(substr(op[o], 1, 1) !~ /[ldCcs]/) #
Opção desconhecida? 
                                                errmsg()

                                        if(substr(op[o], 2, 1) !~
/[[:digit:]]/) # .. e o argumento?
                                                errmsg2(("-" op[o]))

                                        opt[substr(op[o], 1, 1)] =
substr(op[o], 2)
                                        
                                }

                                        if(opt["l"]) # Se a opção "l" existir
altera o default (def_len)
                                                def_len = int(opt["l"])

                                        if(opt["C"]) # Se a opção "C" existir
altera o default (def_up)
                                                def_up = int(opt["C"])

                                        if(opt["d"]) # Se a opção "d" existir
altera o default (def_di)
                                                def_di = int(opt["d"])
                                                
                                        if(opt["s"]) # Se a opção "s" existir
altera o default (def_sp)
                                                def_sp = int(opt["s"])
                                
                                # Gerando um string aleatória com a
quantidade especificada 
                                # por def_len
                                        passwd = aleat(def_len) 

                                # picando tudo...
                                        split(passwd, p, "")
                                        split(upper, u, "")
                                        split(digit, d, "")
                                        split(special, s, "")
                                        
                                        # Colocando os números aleatórios em
posições aleatórias...
                                        while(r < def_di){
                                                dig = d[int(rand() * 10) + 1]
                                                al = p[int(rand() * def_len) +
1]

                                                # Evitando números repetidos em
senhas com menos de 
                                                # dez dígitos..
                                                if(def_di <= 10)
                                                        while(passwd ~ dig)
                                                                dig = 
d[int(rand() *
10) + 1]

                                                sub(al, dig, passwd)
                                                r++
                                        }
                                        
                                        
                                        split(passwd, p, "") # Redividindo a
senha alterada

                                        
                                        # Colocando letras maiúsculas
aleatórias em posições aleatórias...
                                        while(x < def_up){
                                                al = p[int(rand() * def_len) +
1]
                                                dig = u[int(rand() * 25) + 1]
                                                
                                                # NÃO substituir os números por
maiusculas.
                                                while(al ~ /[[:digit:]]/) al =
p[int(rand() * def_len) + 1]

                                                # Evitando seqüência de letras
maiúsculas repetidas...
                                                while(passwd ~ dig)
                                                        dig = u[int(rand() * 
24) + 1]

                                                sub(al, dig, passwd)
                                                x++
                                        }


                                        split(passwd, p, "") # Redividindo a
senha alterada

                                        if(def_sp != 0){
                                                        while( w < def_sp){
                                                                spe = 
s[int(rand() *
28) + 1]
                                                                al = 
p[int(rand() *
def_len) + 1]
                                                        
                                                                while(al ~
/[[:upper:]]/ || al ~ /[[:digit:]]/)
                                                                        al = 
p[int(rand() *
def_len) + 1]
                                                                        
                                                                sub(al, spe, 
passwd)
                                                                w++
                                        }
                                }
                                print passwd
                        }

##### FIM DO SCRIPT

-- 
" Eis que o os olhos do Senhor estão sobre os que o
temem, sobre os que esperam na sua misericórdia, para
livrar-lhes a alma da morte, e, no tempo da fome,
conservar-lhes a vida. Sl 33:18-19"

                //// 
              ( O O )
    =======oOO==(_)==OOo============
    Márcio Alexandre S. Mendonça 
    address@hidden    
    Linux User #298595
           .oooO   Oooo.
    =======(   )===(   )============
            \ (     ) /
             \_)   (_/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]