Hace un par de años cuando empece con el blog uno de los primeros post que escribí fue la publicación de un script de generación de contraseñas por consola, hoy les traigo una actualización de dicho código, que copia automáticamente la contraseña generada al portapapeles ahorrándonos tener que copiarlo, parece una tonteria lo se aunque ahorra tiempo y movimientos.
alvaro@acer:~$ passgen -l 32 -t all KLzX,7)TVxOsVctGXkF1ez8b(20/4Dqf alvaro@acer:~$
Tipos de contraseña:
- ABC La contraseña solo contendrá letras
- NUM La contraseña solo contendrá números
- ANUM La contraseña solo contendrá letras y números aunque sin símbolos
- ALL La contraseña contendrá letras, números y símbolos
El tipo se especifica con el parámetro -t
El largo de la cadena generada podemos cambiarlo con el parametro -l
Solo tenemos que guardar el script en una archivo por ejemplo en /usr/bin/passgen
Luego ejecutamos
sudo chmod +x /usr/bin/passgen
Finalmente el codigo:
#!/usr/bin/python import sys import random import os import pynotify # Tipos ABC, NUM, ANUM, ALL class PassGen: length = 8 seed = '' password ='' file = '' quantityChecker = None quantity = 1 def __init__(self,*arguments): self.length = 18 self.setMode('all') self.quantityChecker= None self.file = None arguments = arguments[0] try : for index in range(1,len(arguments)): if arguments[index] == "-t": self.setMode(arguments[index + 1]) if arguments[index] == "-l": self.setLength(arguments[index + 1]) if arguments[index] == "-f": self.setFile(arguments[index + 1]) if arguments[index] == "-b": self.quantityChecker = True self.quantity = arguments[index + 1] if arguments[index] == "-h": self.showHelp() sys.exit(0) if self.quantityChecker: self.generatePasswordList(self.quantity); else: self.generatePassword(); except Exception: self.showHelp() def generatePassword(self): self.password = '' stop = int(self.length) a = 0 while a < stop: self.password = self.password + str(self.seed[random.randint(0,len(self.seed)-1)]) a = a + 1 cmd = 'echo -n \'' + self.password + '\' | xclip -selection c' os.system(cmd) if self.quantityChecker: print self.password else: print "\n" + self.password + "\n" if self.file != None: self.__savef(self.file,self.password + "\n",'a') pynotify.init("Passgen") notice = pynotify.Notification("Passgen", "Password copiado al portapapeles") notice.show() def generatePasswordList(self,quantity): if self.file != None: self.__savef(self.file,"",'w') i = 0 stop = int(quantity) while i < stop: self.generatePassword() i = i + 1 def showHelp(self): print " " print "passgen -t [type] -l [long] -f [file] -b [integer]" print " " print "Option -t is a type " print " " print " Type options: " print " 'abc' for only letters passowrd" print " 'num' for only numbers passowrd" print " 'anum' for generate password with and letters passowrd" print " 'all' for generate password with numbers, letters and special characters" print " " print " For default type is anum" print " " print " Option -l is length passowrd" print " " print " Option -f is path of ouput file" print " " print " Option -b is quantity of password generate at the same time" print " " print " Option -h for help" print " " def __abc(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] def __num(self): self.seed = ['0', '1' , '2', '3', '4', '5', '6', '7', '8', '9'] def __anum(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1' , '2', '3', '4', '5', '6', '7', '8', '9'] def __all(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1' , '2', '3', '4', '5', '6', '7', '8', '9', '!', '"', '#', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', '{', '|', '}', '~', '@'] def __openf(self,path=''): fo = open(path, "r+") str = fo.read(10); fo.close() return str def __savef(self,path='',content='',mode='w'): fo = open(path, mode) fo.write(content); fo.close() def setMode(self,mode): options = { 'abc': self.__abc, 'num': self.__num, 'anum': self.__anum , 'all': self.__all} options[mode]() def setLength(self,length): self.length = length def setFile(self,file): self.file = file def setQuantity(self,quantity): self.quantity = quantity strpass = PassGen(sys.argv)
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas que sino fuera por estos nabos no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan mejor madura.