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 libraries import 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 matrix ecm = [[ 3 , 4 ], [ 3 , 6 ]] i = 0 l = 0 # Lists of Alphabets and its values smallalpha = [ " " , "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 Encoding for 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 + 1 a = a[ 0 :lenb] tb = b # convert this array to 2D array for further # multiplication with encoding matrix j = 0 k = 0 # b[m][n] m is always 2 n = 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 = 0 j = 0 k = 0 for 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 libraries import numpy as np from numpy.linalg import inv # Initial values a = [ 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 matrix ecm = [[ 3 , 4 ], [ 3 , 6 ]] # Lists of Alphabets and its values smallalpha = [ " " , "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 Matrix lenb = 6 a = [ 63 , 46 , 12 , 81 , 48 , 12 ] sobj = slice (lenb) a = a[sobj] # convert array to 2d matrix to further # multiplication with inverse of 2d matrix j = 0 k = 0 # b[m][n] m is always 2 n = 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 matrix dcm = inv(ecm) dcm = np.matmul(dcm, tdm) # Convert to 1d array for extracting word i = 0 j = 0 k = 0 for i in range ( 2 ): for j in range ( int (lenb / 2 )): a[k] = dcm[i][j] k = k + 1 # Creating a decoded word text = "" 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