Jump to content
Yana

[Resolvido] Password aleatória

Recommended Posts

Yana

Boas, fiz mais um pequeno script em python, nomeadamente um gerador de senhas aleatórias, deixo aqui o código e gostava de opiniões sobre como melhora-lo.

import random
char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
num_caract = int(input("Número de caracteres: "))
def password():
if (num_caract < 0):
 return "Erro: número negativo"
elif (num_caract == 0):
 return "Erro: Tem que ter pelo menos 1 caracter."
else:
 passwd = ""
 while len(passwd) != num_caract:
	 passwd = passwd + random.choice(char)
 if len(passwd) == num_caract:
	 return "Password: %s" % passwd

print password()

Edited by djthyrax
GeSHi

Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
pmg

O ultimo if é redundante: podes fazer o return logo a seguir ao while.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Yana

O ultimo if é redundante: podes fazer o return logo a seguir ao while.

Ok obrigado :)


Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
thoga31

Outra ideia: passa por parâmetro o número de caracteres:

def password(num_caract)

Assim, sempre que precisares de chamar este método, fazes:

password(int(input("Número de caracteres? ")))

Quando um método depende de um valor deste género, deverá ser uma variável local (passada por parâmetro) e não uma global. Assim é utilizável em qualquer script. ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
Yana

Outra ideia: passa por parâmetro o número de caracteres:

def password(num_caract)

Assim, sempre que precisares de chamar este método, fazes:

password(int(input("Número de caracteres? ")))

Quando um método depende de um valor deste género, deverá ser uma variável local (passada por parâmetro) e não uma global. Assim é utilizável em qualquer script. ;)

Ok muito obrigado :thumbsup:

Edited by Yana

Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
djthyrax

Usem raw_input e não input, podem ver na documentação o porquê.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
thoga31

Usem raw_input e não input, podem ver na documentação o porquê.

No Python 3 não consigo utilizar o raw_input porque, segundo o erro, não está declarado.

Deve estar numa lib qualquer que eu não sei qual é. O mesmo acontece com o reduce que no Python 3 tem de ser importado da lib functools.

Consegues-me indicar a que lib posso ir buscar o raw_input, ou os métodos de input da versão 3 mudaram?


Knowledge is free!

Share this post


Link to post
Share on other sites
Yana

No Python 3 não consigo utilizar o raw_input porque, segundo o erro, não está declarado.

Deve estar numa lib qualquer que eu não sei qual é. O mesmo acontece com o reduce que no Python 3 tem de ser importado da lib functools.

Consegues-me indicar a que lib posso ir buscar o raw_input, ou os métodos de input da versão 3 mudaram?

Yah, mudou fica input().

Edited by Yana

Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
thoga31

Pois, é que eu utilizo o Python 3, e o raw_input andava desaparecido xD

Obrigado, @djthyrax. ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
Dr_Lion

Uma sugestão completares o dicionário, com caracteres especiais.. nem que sejam alguns já dá outra segurança á password, a não ser que seja um programa puramente académico.

  • Vote 1

Share this post


Link to post
Share on other sites
thoga31

Apesar de ser de âmbito académico, ficaria muito bem uns caracteres especiais, tens razão, @Dr_Lion ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
Yana

Uma sugestão completares o dicionário, com caracteres especiais.. nem que sejam alguns já dá outra segurança á password, a não ser que seja um programa puramente académico.

Roger that


Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
Gil Sousa

    while len(passwd) != num_caract:
	 passwd = passwd + random.choice(char)        

Podes altear o código dentro do while para


while len(str_pass) != num_caract:
str_pass = str_pass + chr(random.randrange(48, 122))   

desta form estas a poupar espaço na memoria que unica função é manter uma string com as letras que podem ser utilizadas para gerar a password.

Share this post


Link to post
Share on other sites
Yana

Podes altear o código dentro do while para


while len(str_pass) != num_caract:
str_pass = str_pass + chr(random.randrange(48, 122))  

desta form estas a poupar espaço na memoria que unica função é manter uma string com as letras que podem ser utilizadas para gerar a password.

ok Obrigado :)


Most people think programming is cold, precise, and mechanical. It's actually creative, perplexing and deeply personal.

Mitch Garnaat

Share this post


Link to post
Share on other sites
icemonster2

Podias dar a escolher o nivel de segurança que o utilizados pretendia.

Por ex:

2 niveis de segurança, um deles com caracteres especiais, fazias o mesmo que fizes-te:

char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
char_especial = "!#$%&/()="
option = raw_input('Nivel de seguranca(1 ou 2): ') #ou input('') no py3
if option == 'nivel 2' or option == 'lvl 2' or option == '2':
 char += char_especial

depois começavas o loop for como fizes-te. simples

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.