Categorías: Desarrollo

Generador de contraseñas por consola

Este post quedo un poco des actualizado te recomiendo ir directamente a este otro mas nuevo y con una versión mejorada de este código:

https://blog.alvarodeleon.com/generador-de-password-por-consola/

Una de las tareas mas habituales y tediosas de un Administrador de Sistemas es asignar contraseñas seguras, algunos sistemas tienen integrado un generador de contraseña al dar de alta o modificar un usuario aunque otros no.

Estar abriendo una pagina web cada vez que generas una contraseña vuelve a ser molesto, para muchos administadores que siempre tenemos muchas consolas abiertas al mismo tiempo como yo, es fundamental tener un generador de contraseñas por consola, el siguiente script en Python sirve para generar contraseñas seguras:

 alvaro@acer:~$ passgen -l 32 -t all KLzX,7)TVxOsVctGXkF1ez8b(20/4Dqf alvaro@acer:~$

Solo tenemos que guardar el script en una archivo por ejemplo en /usr/bin/passgen

Luego ejecutamos

sudo chmod +x /usr/bin/passgen

Con opciones realmente simples, con -l se especifica el largo de la contraseña y con -t el tipo, donde estos pueden ser de tipo “abc” que solo contiene letras o “num” solo numeros, ademas de “anum” que contiene letras y números, y por ultimo “all” que contiene letras, números y caracteres especiales.

#!/usr/bin/python

import sys
import random



# Tipos ABC, NUM, ANUM, ALL



class PassGen:

    length = 8
    seed = ''
    password =''
    file = ''
    quantityChecker = None
    quantity = 1

    def __init__(self,*arguments):
        self.length = 16
        self.setMode('anum')
        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

        if self.quantityChecker:
            print self.password
        else:
            print "\n" + self.password + "\n"

        if self.file != None:
            self.__savef(self.file,self.password + "\n",'a')

    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)

Entradas recientes

Estadisticas de EasyMySQL

Normalmente, a las estadísticas del blog no le presto demasiada atención, sin embargo, trabajando en…

5 days hace

Nueva pagina de Publicaciones

La idea principal detrás de este blog es marca personal, el blog es para centralizar…

2 weeks hace

Migrar una maquina virtual desde VirtualBox a KVM

El migrar el disco duro es bastante sencillo como se verá a continuación, la principal…

3 weeks hace

Instalar QEMU/KVM y Virtual Machine Manager

Cuando se trata de virtualización en el escritorio, una de las primeras opciones son sin…

1 month hace

Instalar adaptador WIFI TP-Link AX 1800/ Archer TX20U en Debian y Ubuntu

Siempre he sido un ferviente defensor de una conexión por cable UTP para trabajar por…

2 months hace

Nuevo dominio para el blog, otra vez!!!

Al fin pude recuperar alvarodeleon.com, no es que lo hubiera perdido, fue peor, lo deje…

3 months hace