Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from string import ascii_lowercase
- from collections import deque
- alphabetToNumbers = dict()
- alphabetToNumbers["A"] = 0
- alphabetToNumbers['B'] = 1
- alphabetToNumbers['C'] = 2
- alphabetToNumbers['D'] = 3
- alphabetToNumbers['E'] = 4
- alphabetToNumbers['F'] = 5
- alphabetToNumbers['G'] = 6
- alphabetToNumbers['H'] = 7
- alphabetToNumbers['I'] = 8
- alphabetToNumbers['J'] = 9
- alphabetToNumbers['K'] = 10
- alphabetToNumbers['L'] = 11
- alphabetToNumbers['M'] = 12
- alphabetToNumbers['N'] = 13
- alphabetToNumbers['O'] = 14
- alphabetToNumbers['P'] = 15
- alphabetToNumbers['Q'] = 16
- alphabetToNumbers['R'] = 17
- alphabetToNumbers['S'] = 18
- alphabetToNumbers['T'] = 19
- alphabetToNumbers['U'] = 20
- alphabetToNumbers['V'] = 21
- alphabetToNumbers['W'] = 22
- alphabetToNumbers['X'] = 23
- alphabetToNumbers['Y'] = 24
- alphabetToNumbers['Z'] = 25
- numbersToAlphabet = dict()
- numbersToAlphabet[0] = 'A'
- numbersToAlphabet[1] = 'B'
- numbersToAlphabet[2] = 'C'
- numbersToAlphabet[3] = 'D'
- numbersToAlphabet[4] = 'E'
- numbersToAlphabet[5] = 'F'
- numbersToAlphabet[6] = 'G'
- numbersToAlphabet[7] = 'H'
- numbersToAlphabet[8] = 'I'
- numbersToAlphabet[9] = 'J'
- numbersToAlphabet[10] = 'K'
- numbersToAlphabet[11] = 'L'
- numbersToAlphabet[12] = 'M'
- numbersToAlphabet[13] = 'N'
- numbersToAlphabet[14] = 'O'
- numbersToAlphabet[15] = 'P'
- numbersToAlphabet[16] = 'Q'
- numbersToAlphabet[17] = 'R'
- numbersToAlphabet[18] = 'S'
- numbersToAlphabet[19] = 'T'
- numbersToAlphabet[20] = 'U'
- numbersToAlphabet[21] = 'V'
- numbersToAlphabet[22] = 'W'
- numbersToAlphabet[23] = 'X'
- numbersToAlphabet[24] = 'Y'
- numbersToAlphabet[25] = 'Z'
- def generateMatrix(stringToHash):
- if (len(stringToHash) > 16):
- raise Exception('error in generateMatrix: stringToHash should not exceed 16 characters')
- i = 0
- matrix = []
- row = []
- for s in stringToHash:
- i = i + 1
- row.append(s)
- if (i == 4):
- matrix.append(row)
- i = 0
- row = []
- return matrix
- def generateIndexMatrix(matrix):
- idxMatrix = []
- idxRow = []
- i = 0
- for row in matrix:
- for letter in row:
- i = i + 1
- idxRow.append(alphabetToNumbers.get(letter))
- if (i == 4):
- idxMatrix.append(idxRow)
- i = 0
- idxRow = []
- return idxMatrix
- def addColumns(matrix, tup):
- (first,second,third,fourth) = tup
- print(matrix)
- col1 = (matrix[0][0] + matrix[1][0] + matrix[2][0] + matrix[3][0]) % 26
- col2 = (matrix[0][1] + matrix[1][1] + matrix[2][1] + matrix[3][1]) % 26
- col3 = (matrix[0][2] + matrix[1][2] + matrix[2][2] + matrix[3][2]) % 26
- col4 = (matrix[0][3] + matrix[1][3] + matrix[2][3] + matrix[3][3]) % 26
- return ((first+col1) % 26, (second+col2) % 26, (third + col3) % 26, (fourth+col4) % 26)
- def shiftMatrix(matrix):
- #Shift first by 1
- rowOne = deque(matrix[0])
- rowTwo = deque(matrix[1])
- rowThree = deque(matrix[2])
- rowFour = deque(matrix[3])
- rowOne.rotate(-1)
- rowTwo.rotate(-2)
- rowThree.rotate(-3)
- rowFour.reverse()
- return [list(rowOne), list(rowTwo), list(rowThree), list(rowFour)]
- hashString = "ILEAVEAAAAAAMILLIONAAAAAAATOAAFRIENDLYCOUSINAAAA"
- matrix = generateMatrix(hashString[0:16])
- print("Hashing:..." + hashString[0:16] +"\n")
- idxMatrix = generateIndexMatrix(matrix)
- columns = addColumns(idxMatrix, (0,0,0,0))
- matrix = shiftMatrix(matrix)
- idxMatrix = generateIndexMatrix(matrix)
- columns = addColumns(idxMatrix, columns)
- print(columns)
- matrix = generateMatrix(hashString[16:32])
- print("Hashing:..." + hashString[16:32] +"\n")
- idxMatrix = generateIndexMatrix(matrix)
- columns = addColumns(idxMatrix, columns)
- matrix = shiftMatrix(matrix)
- idxMatrix = generateIndexMatrix(matrix)
- columns = addColumns(idxMatrix, columns)
- matrix = generateMatrix(hashString[32:48])
- print("Hashing:..." + hashString[32:48] +"\n")
- idxMatrix = generateIndexMatrix(matrix)
- columns = addColumns(idxMatrix, columns)
- matrix = shiftMatrix(matrix)
- idxMatrix = generateIndexMatrix(matrix)
- (a,b,c,d) = addColumns(idxMatrix, columns)
- print("Hash is: " + numbersToAlphabet.get(a) + numbersToAlphabet.get(b) + numbersToAlphabet.get(c) + numbersToAlphabet.get(d))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement