associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "GerandoPasswords"

Diferenças entre as versões de 11 e 12
Revisão 11e 2004-02-15 20:55:02
Tamanho: 6579
Editor: 200-096-130-241
Comentário: correção de erro
Revisão 12e 2004-02-15 22:37:19
Tamanho: 6247
Editor: FelipeLessa
Comentário: Remoção do suporte ao carregamento sem GUI e outras alterações menores.
Deleções são marcadas assim. Adições são marcadas assim.
Linha 4: Linha 4:

''Essa descrição foi criada por FelipeLessa com alguns comentários do RodrigoNishino (aparece com um * na frente). Veja a seção Autor abaixo.''
Linha 22: Linha 20:
# Pass Generator - V 1.5 # Pass Generator - V 1.5.1
Linha 29: Linha 27:
# - Modificado por FelipeLessa (2004/02/15):
# o Nova função cria() (renomeada para criar_password() ) de RodrigoNishino torna o programa totalmente dependente da anygui. Removendo anygui_disponivel.
# o Alterações simples.
Linha 40: Linha 41:
# o Retirar tag coding visto que quando o código for copiado & colado do Wiki ele pode ser alterado.
# o Texto que aparece por padrão deve corresponder ao especificado no início do arquivo.
# o Retirar tag coding visto que quando o código for copiado & colado do  Wiki ele pode ser alterado.
# o Texto que aparece por padrão deve corresponder ao especificado no  início do arquivo.
Linha 45: Linha 46:
###
### Import's
###
Linha 46: Linha 50:
# Import's
Linha 49: Linha 52:
    anygui_disponivel = True # Caso alguém queira a função apenas e não tenha o anygui.
Linha 51: Linha 53:
    print "AVISO: Desabilitando interface gráfica."
    anygui_disponivel = False
    from sys import stderr, exit
    print >> stderr, "ERRO: Interface anygui não disponível."
    exit(1)
Linha 56: Linha 59:
###
Linha 57: Linha 61:
###
Linha 58: Linha 63:
def cria(**kwds): def criar_password(**kwds):
Linha 60: Linha 65:
    # Usei "abcd ...." ao invés de string.lowercase por que está acontecendo algum bug ...
    AoMenosUm = 0 # Solução utilizada para evitar bug quando nenhum dos checkboxes foi marcado

# Usei "abcd..." ao invés de string.lowercase porque está acontecendo algum bug...
Linha 63: Linha 68:
        carac = carac + "abcdefghijklmnopqrstuvwxyz"
        AoMenosUm = 1
        carac += "abcdefghijklmnopqrstuvwxyz"
Linha 66: Linha 70:
        carac = carac + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        AoMenosUm = 1
        carac += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Linha 69: Linha 72:
        carac = carac + "0123456789"
        AoMenosUm = 1
    if AoMenosUm:
        tamanho = TamanhoTField.text
        int_tamanho = int(tamanho
)
        if int_tamanho < 5:
        carac += "0123456789"

    if carac:
        tamanho = int(TamanhoTField.text)
        if tamanho < 5:
Linha 78: Linha 80:
            for p in range(int_tamanho):
                final = str(final) + str(choice(carac))
            Texto.text = final #pega a variável final e põe dentro de Texto.text
            for p in xrange(tamanho):
                final += choice(carac)
            Texto.text = final # Pega a variável final e põe dentro de Texto.text .
Linha 89: Linha 91:
if anygui_disponivel: Programa = gui.Application()
Linha 91: Linha 93:
    Programa = gui.Application() Janela = gui.Window(title="PassGenerator")
Janela.size = (180, 105)
Linha 93: Linha 96:
    Janela = gui.Window(title="PassGenerator")
    Janela.size = 180, 105
Texto = gui.TextField()
Texto.width = Janela.width
Texto.hstretch = 1
Janela.add(Texto)
Linha 96: Linha 101:
    Texto = gui.TextField()
    Texto.width = Janela.width
    Texto.hstretch = 1
    Janela.add(Texto)
OKButton = gui.Button(text="Criar Senha")
OKButton.width = Janela.width - 20
OKButton.hstretch = 1
Janela.add(OKButton, top=(Texto, 5), left = 10)
gui.link(OKButton, criar_password)
Linha 101: Linha 107:
    OKButton = gui.Button(text="Criar Senha")
    OKButton.width = Janela.width - 20
    OKButton.hstretch = 1
    Janela.add(OKButton, top=(Texto, 5), left = 10)
    gui.link(OKButton, cria)
Check_az = gui.CheckBox(text="a-z")
Check_az.width = 60
Check_az.on = 1
Janela.add(Check_az, top=(OKButton, 5), left = 5)
Linha 107: Linha 112:
    Check_az = gui.CheckBox(text="a-z")
    Check_az.width = 60
    Check_az.on = 1
    
Janela.add(Check_az, top=(OKButton, 5), left = 5)
Check_AZ = gui.CheckBox(text="A-Z")
Check_AZ.width = 60
Janela.add(Check_AZ, top=(OKButton, 5), left=(Check_az, 5))
Linha 112: Linha 116:
    Check_AZ = gui.CheckBox(text="A-Z")
    Check_AZ.width = 60
    Janela.add(Check_AZ, top=(OKButton, 5), left=(Check_az, 5))
Check_09 = gui.CheckBox(text="0-9")
Check_09.width = 60
Janela.add(Check_09, top=(OKButton, 5), left=(Check_AZ, 5))
Linha 116: Linha 120:
    Check_09 = gui.CheckBox(text="0-9")
    Check_09.width = 60
    Janela.add(Check_09, top=(OKButton, 5), left=(Check_AZ, 5))
TamanhoLabel = gui.Label(text="Tamanho")
TamanhoLabel.width = 50
Janela.add(TamanhoLabel, top=(Check_az, 5), left = 5)
Linha 120: Linha 124:
    TamanhoLabel = gui.Label(text="Tamanho")
    
TamanhoLabel.width = 50
    Janela.add(TamanhoLabel, top=(Check_az, 5), left = 5)
TamanhoTField = gui.TextField()
TamanhoTField.width = 50
TamanhoTField.height = 17
TamanhoTField.text
= "5"
Janela.add(TamanhoTField, top=(Check_az, 5), left=(TamanhoLabel, 5))
Linha 124: Linha 130:
    TamanhoTField = gui.TextField()
    TamanhoTField.width = 50
    TamanhoTField.height = 17
    TamanhoTField.text = "5"
    Janela.add(TamanhoTField, top=(Check_az, 5), left=(TamanhoLabel, 5))
Programa.add(Janela)
Linha 130: Linha 132:
    Programa.add(Janela) if __name__=="__main__":
    Programa.run()
Linha 132: Linha 135:
    if __name__=="__main__":
        Programa.run()

Gerando Password

O programa Pass Generator cria senhas aleatórias a partir de uma série de caracteres. Os caracteres que serão usados para criar a senha e o número de caracteres da mesma são selecionados pelo usuário.

Para a criação da senha em si é usada a função padrão do python random.choice(), que escolhe (óbvio, não? :) ) um item de uma sequência aleatoriamente, sendo que a sequência em questão são os caracteres em si. Por isso o programa não leva em consideração senhas muito fáceis ou dificeis que ocasinalmente possam ser criadas.

A interface é construída em anygui. Pegue-o para as plataformas *nix e Windows em [http://anygui.sourceforge.net/ anygui.sf.net].

Nesta "nova versão" a interface foi totalmente remodelada, permitindo que a função handler_buttonsgenerate() fosse inutilizada pois não estava funcionando (sem motivo aparente). O código está mais simples também.

Código

   1 #!/usr/bin/env python
   2 # Pass Generator - V 1.5.1
   3 # Rodrigo Calanca Nishino
   4 # 
   5 # Programa simples que gera passwords
   6 # Atenção: Ele usa o anygui (anygui.sourceforge.net)
   7 #
   8 # ChangeLog:
   9 #  - Modificado por FelipeLessa (2004/02/15):
  10 #     o Nova função cria() (renomeada para criar_password() ) de RodrigoNishino torna o programa totalmente dependente da anygui. Removendo anygui_disponivel.
  11 #     o Alterações simples.
  12 #  - Modificado por RodrigoNishino (2004/02/15):
  13 #     o Interface redesenhada.
  14 #     o Codigo foi simplificado.
  15 #  - Modificado por FelipeLessa para (2004/01/23):
  16 #     o Não aceitar números negativos. Obrigado por mostrar o problema RodrigoNishino.
  17 #     o Unificar funções que tratam os sinais recebidos pelos botões. Aquilo realmente era uma repetição.
  18 #  - Modificado por FelipeLessa para (2004/01/19):
  19 #     o Possibilitar a importação do arquivo sem que a instalação do anygui seja necessária.
  20 #  - Modificado por FelipeLessa para (2004/01/17):
  21 #     o Otimizar conjuntos de letras.
  22 #     o Utilizar "".join ao invés de laço for em password() . 
  23 #     o Retirar tag coding visto que quando o código for copiado & colado do  Wiki ele pode ser alterado.
  24 #     o Texto que aparece por padrão deve corresponder ao especificado no  início do arquivo.
  25 #     o Adicionada a possibilidade de importar arquivo sem abrir a janela.
  26 #     o Modificações menores.
  27 
  28 ###
  29 ### Import's
  30 ###
  31 
  32 try:
  33     import anygui as gui
  34 except ImportError:
  35     from sys import stderr, exit
  36     print >> stderr, "ERRO: Interface anygui não disponível."
  37     exit(1)
  38 
  39 from random import choice
  40 
  41 ###
  42 ### Função por onde todo o programa se desenrola
  43 ###
  44 
  45 def criar_password(**kwds):
  46     carac = ""
  47 
  48     # Usei "abcd..." ao invés de string.lowercase porque está acontecendo algum bug...
  49     if Check_az.on == 1:
  50         carac += "abcdefghijklmnopqrstuvwxyz"
  51     if Check_AZ.on == 1:
  52         carac += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  53     if Check_09.on == 1:
  54         carac += "0123456789"
  55 
  56     if carac:
  57         tamanho = int(TamanhoTField.text)
  58         if tamanho < 5:
  59             Texto.text = "Tamanho muito pequeno"
  60         else:
  61             final = ""
  62             for p in xrange(tamanho):
  63                 final += choice(carac)
  64             Texto.text = final # Pega a variável final e põe dentro de Texto.text .
  65     else:
  66         Texto.text = "Parametros invalidos"
  67        
  68     
  69 ###
  70 ### Interface Gráfica
  71 ###
  72 
  73 Programa = gui.Application()
  74 
  75 Janela = gui.Window(title="PassGenerator")
  76 Janela.size = (180, 105)
  77 
  78 Texto = gui.TextField()
  79 Texto.width = Janela.width
  80 Texto.hstretch = 1
  81 Janela.add(Texto)
  82 
  83 OKButton = gui.Button(text="Criar Senha")
  84 OKButton.width = Janela.width - 20
  85 OKButton.hstretch = 1
  86 Janela.add(OKButton, top=(Texto, 5), left = 10)
  87 gui.link(OKButton, criar_password)
  88 
  89 Check_az = gui.CheckBox(text="a-z")
  90 Check_az.width = 60
  91 Check_az.on = 1
  92 Janela.add(Check_az, top=(OKButton, 5), left = 5)
  93 
  94 Check_AZ = gui.CheckBox(text="A-Z")
  95 Check_AZ.width = 60
  96 Janela.add(Check_AZ, top=(OKButton, 5), left=(Check_az, 5))
  97 
  98 Check_09 = gui.CheckBox(text="0-9")
  99 Check_09.width = 60
 100 Janela.add(Check_09, top=(OKButton, 5), left=(Check_AZ, 5))
 101 
 102 TamanhoLabel = gui.Label(text="Tamanho")
 103 TamanhoLabel.width = 50
 104 Janela.add(TamanhoLabel, top=(Check_az, 5), left = 5)
 105 
 106 TamanhoTField = gui.TextField()
 107 TamanhoTField.width = 50
 108 TamanhoTField.height = 17
 109 TamanhoTField.text = "5"
 110 Janela.add(TamanhoTField, top=(Check_az, 5), left=(TamanhoLabel, 5))
 111 
 112 Programa.add(Janela)
 113 
 114 if __name__=="__main__":
 115     Programa.run()

Autor

Felipe, escreva aqui alguma coisa sobre essa aplicação. Conte um pouco da história dela e fale um pouco sobre o funcionamento dela também. -- OsvaldoSantanaNeto

Eu não sou o autor do Pass Generator, devo deixar claro, e sim Rodrigo Calanca Nishino, como descrito no cabeçalho do programa. Ele aparentemente não criou uma descrição para este aplicativo e, a pedidos de OsvaldoSantanaNeto, eu criei uma simples baseada no código (para dizer a verdade, nem cheguei a rodar o programa visto que não possuo o anygui no meu computador). Rodrigo, se você vier aqui de novo, por favor faça as alterações necessárias. -- FelipeLessa

"Antes de tudo, gostaria de agradecer ao FelipeLessa pelos trechos de código, aprendi novas coisas com a colaboração dele. O programa surgiu para mostrar para um colega meu que Python poderia fazer programas gráficos também. Como eu sou um newbie em Python , meu primeiro script imprimia na tela um monte de texto randômico ... (acredite eu sou fissurado neste módulo random) e para não perder as raízes ... decidi fazer meu primeiro programa gráfico semelhante ao meu primeiro script. Ele me garantiu que se ele tentasse fazer este mesmo programa em VB ele seria no mínimo umas 3 vezes maior.

O programa não é lá uma maravilha, particularmente eu questiono a aplicabilidade dele, porém baseado no que eu aprendi nele, pretendo construir aplicações maiores ou pelo menos mais úteis que o PassGenerator (aliás esse nome é horrível). Sem dúvida que se não fosse graças PythonBrasil eu não teria sequer me metido com interfaces gráficas... permaneceria no meu programa de escrever coisas randomicas na tela" -- RodrigoNishino


FelipeLessa