Python | Encoding Decoding using Matrix - GeeksforGeeks

30 Dec, 2020
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 belowconvert 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
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
Take Encoded number convert into 2D matrix(array)
Inverse Encoding matrix!
Multiply Encoded matrix with inverse of encoding matrix.
convert to 1D Matrix(array).then convert to corresponding Alphabets.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 My Personal Notes
arrow_drop_upSave
# 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]

# 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 
Python matrix-program
Python
Python Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Install PIP on Windows ?
Check if element exists in list in Python
How To Convert Python Dictionary To JSON?
Python Classes and Objects
How to drop one or multiple columns in Pandas Dataframe
Defaultdict in Python
Python | Get dictionary keys as a list
Python | Split string into list of characters
Python | Convert a list to dictionary
How to print without newline in Python?