Python | Encoding Decoding using Matrix
This article is about how we use the matrix to encode and decode a text message and simple strings.
Encoding process :
- Take a String convert to corresponding number shown below

- convert to 2D matrix(array). Now we have 2×2 matrix!
- When we multiply this matrix with encoding matrix we get encoded 2×2 matrix.
- now convert to vector(1D array) and Display to user
Decoding process

Code : Encode.py
# loading librariesimport numpy as np a = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]c = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]] # encode matrixecm = [[3,4], [3,6]]i = 0l = 0 # Lists of Alphabets and its valuessmallalpha = [" ","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"]capitalalpha = [" ","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"]alphavalues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] # string to convert b = "India"listb = list(b)lenb = len(listb) # Loop to convert Word to Values that # are further useful for Encodingfor i in range(lenb): for j in range(27): if(listb[i] == smallalpha[j]): a[i] = alphavalues[j] if(j == 23): j = 0 break if(j == 23): for k in range(27): if(listb[i] == capitalalpha[k]): a[i] = alphavalues[k] break if(lenb%2 == 1): lenb = lenb+1a = a[0:lenb]tb = b # convert this array to 2D array for further # multiplication with encoding matrix j = 0k = 0 # b[m][n] m is always 2n = int(lenb/2)for i in range(0,lenb): if(j<n): c[k][j] = a[i] j = j+1 else: k = k+1 j = 0 c[k][j] = a[i] j = j+1 # Multiplay matrix by Encoding 2x2 matrix c = np.matmul(ecm, c) # Convert to 1D array for displaying i = 0j = 0k = 0for i in range(2): for j in range(int(lenb/2)): a[k] = c[i][j] k = k+1 a = a[0:lenb]print("Encoding matrix = ", ecm)print("encrypted form = ", a) |
Time Complexity : O(n)(where n is length of message)
Space Complexity : O(n)
Output:
Encoding matrix = [[3, 4], [3, 6]] Encrypted form = [63, 46, 12, 81, 48, 12]
Code : Decode.py
# importing librariesimport numpy as npfrom numpy.linalg import inv # Initial valuesa =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] tdm =[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] # encoding matrixecm =[[3, 4], [3, 6]] # Lists of Alphabets and its valuessmallalpha = [" ","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"]capitalalpha = [" ","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"]alphavalues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] # Take inputs# elements in Encrypted Matrixlenb = 6a = [63, 46, 12, 81, 48, 12] sobj = slice(lenb)a = a[sobj] # convert array to 2d matrix to further # multiplication with inverse of 2d matrixj = 0k = 0 # b[m][n] m is always 2n = int(lenb / 2)for i in range(0, lenb): if(j<n): tdm[k][j]= a[i] j = j + 1 else: k = k + 1 j = 0 tdm[k][j]= a[i] j = j + 1 # Multiply by inverse matrixdcm = inv(ecm)dcm = np.matmul(dcm, tdm) # Convert to 1d array for extracting wordi = 0j = 0k = 0for i in range(2): for j in range(int(lenb / 2)): a[k]= dcm[i][j] k = k + 1 # Creating a decoded wordtext = ""for i in range(0, lenb): for j in range(0, 27): if(a[i]== alphavalues[j]): text =''.join([text, smallalpha[j]]) print("Decoded message = "+text) |
Time Complexity : O(n)(where n is number of elements)
Space Complexity : O(n)
Output:
Decoded message = india






Please Login to comment...