Skip to content

Commit b1d0d1f

Browse files
authored
Update hill_cipher.py
1 parent 77e427e commit b1d0d1f

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

ciphers/hill_cipher.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,18 @@ def check_determinant(self) -> None:
149149
w.r.t 36. Try another key.
150150
"""
151151
det_value = np.linalg.det(self.encrypt_key)
152-
# Only round if necessary
153-
det = int(det_value) if det_value.is_integer() else int(round(det_value))
154-
155-
if det < 0:
156-
det = det % len(self.key_string)
157-
158-
req_l = len(self.key_string)
159-
if greatest_common_divisor(det, req_l) != 1:
160-
msg = (
161-
f"determinant modular {req_l} of encryption key({det}) is not co prime "
162-
f"w.r.t {req_l}.\nTry another key."
163-
)
164-
raise ValueError(msg)
152+
det = int(round(det_value))
153+
154+
if det < 0:
155+
det = det % len(self.key_string)
156+
157+
req_l = len(self.key_string)
158+
if greatest_common_divisor(det, req_l) != 1:
159+
msg = (
160+
f"determinant modular {req_l} of encryption key({det}) is not co prime "
161+
f"w.r.t {req_l}.\nTry another key."
162+
)
163+
raise ValueError(msg)
165164

166165
def process_text(self, text: str) -> str:
167166
"""
@@ -276,24 +275,25 @@ def make_decrypt_key(self) -> np.ndarray:
276275
w.r.t 36. Try another key.
277276
"""
278277
det_value = np.linalg.det(self.encrypt_key)
279-
# Only round if necessary
280-
det = int(det_value) if det_value.is_integer() else int(round(det_value))
281-
282-
if det < 0:
283-
det = det % len(self.key_string)
284-
285-
det_inv: int | None = None
286-
for i in range(len(self.key_string)):
287-
if (det * i) % len(self.key_string) == 1:
288-
det_inv = i
289-
break
290-
291-
if det_inv is None:
292-
raise ValueError("Modular inverse does not exist for decryption key")
293-
294-
det_float = np.linalg.det(self.encrypt_key)
295-
inv_key = det_inv * det_float * np.linalg.inv(self.encrypt_key)
296-
return self.to_int(self.modulus(inv_key))
278+
# 直接取整并转换为整数
279+
det = int(round(det_value))
280+
281+
if det < 0:
282+
det = det % len(self.key_string)
283+
284+
det_inv: int | None = None
285+
for i in range(len(self.key_string)):
286+
if (det * i) % len(self.key_string) == 1:
287+
det_inv = i
288+
break
289+
290+
if det_inv is None:
291+
raise ValueError("Modular inverse does not exist for decryption key")
292+
293+
det_float = np.linalg.det(self.encrypt_key)
294+
inv_key = det_inv * det_float * np.linalg.inv(self.encrypt_key)
295+
return self.to_int(self.modulus(inv_key))
296+
297297

298298
def decrypt(self, text: str) -> str:
299299
"""

0 commit comments

Comments
 (0)