Hill encryption (devised by mathematician Lester S. Hill in 1929) is a technique that makes use of matrices and modular arithmetic. It is ideally used with an alphabet that has a prime number of characters, so we'll use the 37 character alphabet A, B, …, Z, 0, 1, …, 9, and the space character. The steps involved are the following:
- Replace each character in the initial text (the plaintext) with the substitution
A→0, B→1, …, (space)→36. If the plaintext is ATTACK AT DAWN this becomes 0 19 19 0 2 10 36 0 19 36 3 0 22 13.
- Group these number into three-component vectors, padding with spaces at the end if necessary. After this step we have \[ \left( \begin{array}{c} 0 \\ 19 \\ 19 \end{array} \right) \left( \begin{array}{c} 0 \\ 2 \\ 10 \end{array} \right) \left( \begin{array}{c} 36 \\ 0 \\ 19 \end{array} \right) \left( \begin{array}{c} 36 \\ 3 \\ 0 \end{array} \right) \left( \begin{array}{c} 22 \\ 13 \\ 36 \end{array} \right) \]
- Multiply each of these vectors by a predetermined 3×3 encryption matrix using modulo 37 arithmetic. If the encryption matrix is \[ \left( \begin{array}{ccc} 30 & 1 & 9 \\ 4 & 23 & 7 \\ 5 & 9 & 13 \end{array} \right) \] then the first vector is transformed as follows: \[\begin{eqnarray*} \left( \begin{array}{ccc} 30 & 1 & 9 \\ 4 & 23 & 7 \\ 5 & 9 & 13 \end{array} \right) \left( \begin{array}{c} 0 \\ 19 \\ 19 \end{array} \right) & = & \left( \begin{array}{c} (30 \times 0 + 1 \times 19 + 9 \times 19) \mod 37 \\ (4 \times 0 + 23 \times 19 + 7 \times 19) \mod 37 \\ (5 \times 0 + 9 \times 19 + 13 \times 19) \mod 37 \end{array} \right) \\ & = & \left( \begin{array}{c} 5 \\ 15 \\ 11 \end{array} \right) \end{eqnarray*}\]
- After multiplying all the vectors by the encryption matrix, convert the resulting values back to the 37-character alphabet and concatenate the results to obtain the encrypted ciphertext. In our example the ciphertext is
FPLSFA4SUK2W9K3.
This method can be generalized to work with any n×n encryption matrix in which case the initial plaintext is broken up into vectors of length n. For this problem you will be given an encryption matrix and a plaintext and must compute the corresponding ciphertext.