>>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) >>> hill_cipher.make_decrypt_key() array([[ 6, 25], [ 5, 26]])
(self)
| 143 | return encrypted |
| 144 | |
| 145 | def make_decrypt_key(self) -> np.ndarray: |
| 146 | """ |
| 147 | >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) |
| 148 | >>> hill_cipher.make_decrypt_key() |
| 149 | array([[ 6, 25], |
| 150 | [ 5, 26]]) |
| 151 | """ |
| 152 | det = round(np.linalg.det(self.encrypt_key)) |
| 153 | |
| 154 | if det < 0: |
| 155 | det = det % len(self.key_string) |
| 156 | det_inv = None |
| 157 | for i in range(len(self.key_string)): |
| 158 | if (det * i) % len(self.key_string) == 1: |
| 159 | det_inv = i |
| 160 | break |
| 161 | |
| 162 | inv_key = ( |
| 163 | det_inv * np.linalg.det(self.encrypt_key) * np.linalg.inv(self.encrypt_key) |
| 164 | ) |
| 165 | |
| 166 | return self.to_int(self.modulus(inv_key)) |
| 167 | |
| 168 | def decrypt(self, text: str) -> str: |
| 169 | """ |