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:

  1. ABC La contraseña solo contendrá letras
  2. NUM La contraseña solo contendrá números
  3. ANUM La contraseña solo contendrá letras y números aunque sin símbolos
  4. 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)

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading