Generatore password con GUI

10 risposte [Ultimo messaggio]
Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno

Ok, questa sezione dovrebbe essere solo per script server-side, ma mi sembra la più adatta comunque. Ieri ho iniziato a leggermi un libro su Python e oggi ho provato a buttare giù il mio script :-D (la sintassi è molto semplice, c'è voluto un attimo).

Ditemi cosa ne pensate, mi farebbero piacere suggerimenti

#!/usr/bin/env python<br />
# -*- coding: latin-1 -*-<br />
# Author: Mirko Pagliai<br />
# Mail: <a href="mailto:mirko.pagliai@gmail.com">mirko.pagliai@gmail.com</a><br />
# Copyright: 2010 by Mirko Pagliai<br />
# generated by wxGlade 0.6.3 on Mon Feb  8 14:59:59 2010</p>
<p>import wx, random, string</p>
<p>version = "1.0.1"</p>
<p>class MyFrame(wx.Frame):<br />
    def __init__(self, *args, **kwds):<br />
        # begin wxGlade: MyFrame.__init__<br />
        kwds["style"] = wx.DEFAULT_FRAME_STYLE<br />
        wx.Frame.__init__(self, *args, **kwds)<br />
        self.label_1 = wx.StaticText(self, -1, "Lunghezza password:")<br />
        self.label_2 = wx.StaticText(self, -1, "Tipo password:")<br />
        self.label_3 = wx.StaticText(self, -1, "Tipo lettere:")<br />
        self.pwdlength = wx.TextCtrl(self, -1, "8")<br />
        self.pwdtype = wx.ComboBox(self, -1, choices=["lettere e numeri", "solo lettere", "solo numeri", "lettere, numeri e simboli"], style=wx.CB_DROPDOWN)<br />
        self.letterstype = wx.ComboBox(self, -1, choices=["maiuscole e minuscole", "solo maiuscole", "solo minuscole"], style=wx.CB_DROPDOWN)<br />
        self.go = wx.Button(self, -1, "Genera password")<br />
        self.label_4 = wx.StaticText(self, -1, "Password generata:")<br />
        self.pwdbox = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)</p>
<p>        # Menu Bar<br />
        self.frame_menubar = wx.MenuBar()<br />
        wxglade_tmp_menu = wx.Menu()<br />
        wxglade_tmp_menu.Append(wx.NewId(), "Informazioni", "", wx.ITEM_NORMAL)<br />
        self.frame_menubar.Append(wxglade_tmp_menu, "Aiuto")<br />
        self.SetMenuBar(self.frame_menubar)<br />
        # Menu Bar end</p>
<p>        self.__set_properties()<br />
        self.__do_layout()</p>
<p>        self.Bind(wx.EVT_BUTTON, self.generatespwd, self.go)<br />
        self.Bind(wx.EVT_MENU, self.showinfo, id=-1)<br />
        # end wxGlade</p>
<p>    def __set_properties(self):<br />
        # begin wxGlade: MyFrame.__set_properties<br />
        self.SetTitle("Generatore password")<br />
        self.pwdtype.SetMinSize((190, 27))<br />
        self.pwdtype.SetSelection(0)<br />
        self.letterstype.SetMinSize((195, 27))<br />
        self.letterstype.SetSelection(0)<br />
        self.pwdbox.SetMinSize((200, 27))<br />
        # end wxGlade</p>
<p>    def __do_layout(self):<br />
        # begin wxGlade: MyFrame.__do_layout<br />
        sizer = wx.BoxSizer(wx.VERTICAL)<br />
        grid_sizer_2 = wx.FlexGridSizer(1, 3, 5, 15)<br />
        grid_sizer_1 = wx.FlexGridSizer(2, 3, 5, 15)<br />
        grid_sizer_1.Add(self.label_1, 0, wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_1.Add(self.label_2, 0, wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_1.Add(self.label_3, 0, wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_1.Add(self.pwdlength, 0, wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_1.Add(self.pwdtype, 0, wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_1.Add(self.letterstype, 0, wx.ADJUST_MINSIZE, 0)<br />
        sizer.Add(grid_sizer_1, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 10)<br />
        grid_sizer_2.Add(self.go, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_2.Add(self.label_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)<br />
        grid_sizer_2.Add(self.pwdbox, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)<br />
        sizer.Add(grid_sizer_2, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 10)<br />
        self.SetSizer(sizer)<br />
        sizer.Fit(self)<br />
        self.Layout()<br />
        # end wxGlade</p>
<p>    #Provoca un alert con errore<br />
    def alert(self, text, title="Errore", icon=wx.ICON_ERROR):<br />
	alert = wx.MessageDialog(self, text, title, wx.OK | icon)<br />
	alert.ShowModal()<br />
        alert.Destroy() </p>
<p>    #Mostra le informazioni sull'applicazione<br />
    def showinfo(self, event): # wxGlade: MyFrame.<br />
        self.alert("pwdgenerator v. "+version+"\n\nCopyright © 2010\nby Mirko Pagliai\n(<a href="mailto:mirko.pagliai@gmail.com">mirko.pagliai@gmail.com</a>)", "Informazioni", wx.ICON_INFORMATION)<br />
        event.Skip()</p>
<p>    #Genera la password<br />
    def generatespwd(self, event): # wxGlade: MyFrame.<br />
	#Se la password ha la lunghezza corretta<br />
	if int(self.pwdlength.GetValue()) >= 3 and int(self.pwdlength.GetValue()) <= 20:<br />
		#Inizializzazione variabili e liste<br />
		self.letters = []<br />
		self.pwd = ""<br />
		self.source = []<br />
		#Imposta le lettere da usare a seconda della scelta<br />
		if self.letterstype.GetValue() == "maiuscole e minuscole":<br />
			self.letters = string.letters<br />
		elif self.letterstype.GetValue() == "solo maiuscole":<br />
			self.letters = string.uppercase<br />
		elif self.letterstype.GetValue() == "solo minuscole":<br />
			self.letters = string.lowercase<br />
		#Imposta i caratteri sorgenti da usare a seconda della scelta<br />
		if self.pwdtype.GetValue() == "solo lettere":<br />
			self.source = self.letters<br />
		elif self.pwdtype.GetValue() == "solo numeri":<br />
			self.source = string.digits<br />
		elif self.pwdtype.GetValue() == "lettere e numeri":<br />
			self.source = self.letters + string.digits<br />
		elif self.pwdtype.GetValue() == "lettere, numeri e simboli":<br />
			self.source = self.letters + string.digits + string.punctuation</p>
<p>		#Genera la password<br />
		for n in range(int(self.pwdlength.GetValue())):<br />
    			self.pwd = self.pwd + random.choice(self.source)</p>
<p>		#Imposta la password generata nel suo box<br />
		self.pwdbox.SetValue(self.pwd)</p>
<p>	#In caso di password troppo lunga o troppo corta<br />
	else:<br />
		self.alert("La password deve avere una lunghezza tra i 3 e i 20 caratteri")<br />
        event.Skip()</p>
<p># end of class MyFrame</p>
<p>if __name__ == "__main__":<br />
    app = wx.PySimpleApp(0)<br />
    wx.InitAllImageHandlers()<br />
    frame = MyFrame(None, -1, "")<br />
    app.SetTopWindow(frame)<br />
    frame.Show()<br />
    app.MainLoop()

Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

Non capisco perché mi mostra paragrafi e ritorni a capo -.-

Ritratto di orion
User offline. Last seen 3 settimane 6 giorni ago. Sconnesso
Iscritto: 11/07/2006
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

E` un problema del forum. In teoria, dovrebbe essere risolto abbastanza in fretta, almeno stando alle ultime notizie avute dagli admin

__________________

openSUSE 11.3 on Acer Aspire 1810tz - KDE ultima versione dal repo K:D:S

Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

orion wrote:
E` un problema del forum. In teoria, dovrebbe essere risolto abbastanza in fretta, almeno stando alle ultime notizie avute dagli admin
Conosci uno di quei siti che permettono di caricare sorgenti? :-)

User offline. Last seen 6 giorni 9 ore ago. Sconnesso
Iscritto: 12/06/2008
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

pastebin:
http://pastebin.com/

oppure utilizzi il tag < pre > ...codice... < / pre > che mantiene sia spazi che ritorni a capo.

Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI
User offline. Last seen 14 ore 47 min ago. Sconnesso
Iscritto: 03/10/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

Ciao

Decisamente l'argomento della generazioni di chiavi random è molto stimolante, anche io tempo fa, per testare Lazarus, ho scritto un programma simile.

C'è un problema scaricando lo script da pastebin, per qualche misterioso motivo non viene decodificato bene © di self.alert("pwdgenerator v. "+version+"\n\nCopyright © 2010\nby Mirko Pagliai\n(mirko.pagliai@gmail.com)", "Informazioni", wx.ICON_INFORMATION)

Quando si fa aiuto informazioni si ha un bell'errore occorre quindi, con un editor, correggere la stringa.

In alternativa a pastebin puoi usare http://depositfiles.com/en/ che salva il file esattamente come lo invii.

Il programma in se è molto semplice e carino, l'unica cosa che non mi piace è l'uso della comparazione con valore come qui:
self.letterstype.GetValue() == "maiuscole e minuscole"
Sarebbe meglio usare l'indice numerico in modo da semplificare l'eventuale lavoro di traduzione.

[postedit]
Ho ritrovato il programma qui
Io avevo aggiunto la possibilità di salvare la chiave e quella di generare la chiave in base ai click casuali con il mouse.
[/postedit]

Ciao Ciao, Moreno

Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

Quote:
Decisamente l'argomento della generazioni di chiavi random è molto stimolante, anche io tempo fa, per testare Lazarus, ho scritto un programma simile.

Molto stimolante!

Quote:
C'è un problema scaricando lo script da pastebin, per qualche misterioso motivo non viene decodificato bene © di self.alert("pwdgenerator v. "+version+"\n\nCopyright © 2010\nby Mirko Pagliai\n(mirko.pagliai@gmail.com)", "Informazioni", wx.ICON_INFORMATION)

Quando si fa aiuto informazioni si ha un bell'errore occorre quindi, con un editor, correggere la stringa.

In alternativa a pastebin puoi usare http://depositfiles.com/en/ che salva il file esattamente come lo invii.

Problemi di codifica? Strano perché ho impostato latin-1 che dovrebbe non dare problemi con quel carattere speciale (la c "speciale" di copyright). Poi io non ho problemi a eseguire il programma.
Potrei pensare che l'editor di testo ha usato una codifica differente per il salvataggio del file, ma a me funziona.
Evidentemente è proprio pastebin a salvare con codifica diversa, userò il sito che mi hai consigliato (non ne conosci uno migliore del tipo http://userscripts.org/, cioè che colleghi gli script a un account?).

Quote:
Il programma in se è molto semplice e carino, l'unica cosa che non mi piace è l'uso della comparazione con valore come qui:
self.letterstype.GetValue() == "maiuscole e minuscole"
Sarebbe meglio usare l'indice numerico in modo da semplificare l'eventuale lavoro di traduzione.

Ho capito cosa intendi e l'ho pensato anche io mentre programmavo. Solo che non conosco la sintassi, e quindi ho ripiegato su questo pessimo escamotage.
Suggerimenti? :-D

Quote:
[postedit]
Ho ritrovato il programma qui
Io avevo aggiunto la possibilità di salvare la chiave e quella di generare la chiave in base ai click casuali con il mouse.
[/postedit]

Ora me lo studio!

Che ne dici invece del for che estrae dalla lista? Non mi convince un granché, sinceramente.

Avevo pensato anche un funzionamento alternativo per la generazione:
lettere e numeri -> una sezione dell'md5 del timestamp
solo numeri -> una sezione (partendo dalla fine, ovviamente) del timestamp
lettere, numeri, simboli -> come il primo ma usando sha1
solo lettere -> qui casca l'asino :-D

Che ne pensi?

p.s. ho ricontrollato la formattazione del post, è apposto, boh!

User offline. Last seen 14 ore 47 min ago. Sconnesso
Iscritto: 03/10/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

Ciao

Non sono un gran conoscitore di Python per cui mi è difficile aiutarti comunque non trovo niente di male nell'uso di for con range.

Cercando nelle pagine di documentazione ho notato che non usi seed.
Questo potrebbe teoricamente ridurre il grado di sicurezza della chiave generata.

Se non ti fidi del generatore di numeri casuali le alternative che vedo sono:

- Introdurre un elemento aleatorio esterno come ho fatto io con il click utente casuale

- Usare librerie di generazione dei numeri random più sicure come quelle di OpenSSL c'è anche il binding qui

- Crearti le tue librerie usando algoritmi più solidi come indicato qui

Ciao Ciao, Moreno

Ritratto di Mirko
User offline. Last seen 4 ore 10 min ago. Sconnesso
Iscritto: 19/12/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

>Cercando nelle pagine di documentazione ho notato che non usi
>seed.
>Questo potrebbe teoricamente ridurre il grado di sicurezza della chiave
>generata.

Ma cosa sarebbe, esattamente? Inizializza la generazione? Quindi devo richiamare quella funzione (senza argomenti) ad ogni ciclo, è esatto?

User offline. Last seen 14 ore 47 min ago. Sconnesso
Iscritto: 03/10/2005
Punti : 0
Gruppi: Nessuno
Re: Generatore password con GUI

Ciao

Come dice il nome seed (seme) crei il punto di inizio della sequenza pseudocasuale quindi va eseguita solo una volta all'inizio del programma, puoi anche passargli dei parametri anche se non so esattamente quali.

Ciao Ciao, Moreno

Condividi contenuti