Python: Eine Passwortmatrix generieren

avatar

Ein Beispiel Pythonskript für eine Passwortmatrix.

import sys
import random
import kakuriyo

class PasswordMatrix:

    def __init__(self):
        self.alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"§$%&/()=?+#-.,*|'
        self.matrix = []

    def createPasswordMatrix(self, char_length = 3):
        for _ in range(7):
            self.matrix.append([[] for _ in range(10)])
        for n in range(7):
            for m in range(10):
                self.matrix[n][m] = self.getCharacters(char_length)

    def accessMatrix(self, row, column):
        return self.matrix[row][column]

    def printPasswordMatrix(self):
        print(self.matrix)

    def getCharacters(self, length):
        chars = ''
        for n in range(length):
            chars += self.alphabet[(random.randint(0,len(self.alphabet)-1))]
        return chars

    def calculateRowIndex(self, word):
        return len(word)-4

    def calculateColumnIndex(self, char):
        self.charColumn = ['abc','def','ghi','jkl','mno','pqr','stu','vwx','yz-','!?']
        for n in range(len(self.charColumn)):
            if char in self.charColumn[n]:
                return n

    def savePasswordMatrix(self, path):
        with open(path,'w') as file:
            for n in range(len(self.matrix)):
                for m in range(len(self.matrix[n])):
                    if m == len(self.matrix[n])-1:
                        file.write(self.matrix[n][m])
                    else:
                        file.write(self.matrix[n][m] + ' ')
                file.write('\n')

    def loadPasswordMatrix(self, path):
        for _ in range(7):
            self.matrix.append([[] for _ in range(10)])
        lines = []
        with open(path, 'r') as file:
            data = file.read()
            lines = data.split('\n')

        for n in range(len(self.matrix)):
            self.matrix[n] = lines[n].split(' ')

    def getPassword(self, word):
        if len(word) < 4:
            print('use only a wordlength between 4 and 10.')
            return
        elif not word.islower():
            print('use only lower written words')
            return
        else:
            row = self.calculateRowIndex(word)
            password = ''

            for n in range(len(word)):
                col = self.calculateColumnIndex(word[n])
                password += self.accessMatrix(row, col)
            return password

if __name__ == '__main__':
    if len(sys.argv) == 1:
        print('Usage')
        print('-s <path>')
        print(' saves a generated passwordmatrix to the specific path')
        print('-l <path for passwordmatrix> -g <word>')
        print(' load a passwordmatrix and generates a password from the <word>')
    elif len(sys.argv) == 3:
        if sys.argv[1] == '-s' and len(sys.argv[2]) > 0:
            p = PasswordMatrix()
            p.createPasswordMatrix()
            p.savePasswordMatrix(sys.argv[2])
            print(f'Passwordmatrix successful saved: {sys.argv[2]}')
    elif len(sys.argv) == 5:
        if sys.argv[1] == '-l' and len(sys.argv[2]) > 0 and sys.argv[3] == '-g' and len(sys.argv[4]) > 0:
            p = PasswordMatrix()
            p.loadPasswordMatrix(sys.argv[2])
            pw = p.getPassword(sys.argv[4])
            print(f'Password for {sys.argv[4]} is: {pw}')



0
0
0.000
0 comments