for a in range(1, 26): # 检查 a 是否与 26 互质(仿射密码要求) if math.gcd(a, 26) != 1: continue for b in range(0, 26): valid = True for i in range(len(plain_head)): m = ord(plain_head[i]) - ord('a') # 明文字母转数字 c = ord(cipher_head[i]) - ord('a') # 密文字母转数字 # 验证加密公式: c ≡ (a*m + b) mod 26 if (a * m + b) % 26 != c: valid = False break if valid: valid_keys.append((a, b))
# 计算模逆元的函数 def modinv(a, m): for x in range(1, m): if (a * x) % m == 1: return x return None
# 解密函数 def decrypt(ciphertext, a, b): a_inv = modinv(a, 26) if a_inv is None: return None plaintext = "" for char in ciphertext: if 'a' <= char <= 'z': c = ord(char) - ord('a') # 解密公式: m = a_inv * (c - b) mod 26 m = (a_inv * (c - b)) % 26 plaintext += chr(m + ord('a')) else: plaintext += char return plaintext
if not valid_keys: print("未找到有效密钥") else: print(f"找到 {len(valid_keys)} 组有效密钥:") for a, b in valid_keys: decrypted = decrypt(cipher_full, a, b) print(f"a={a}, b={b} → {decrypted}")
[SWPUCTF 2021 新生赛]原来你也玩原神
咦?压缩包不是没设密码吗,怎么打不开了
010打开 FF FB 92 C0是mp4格式 改一下后缀名 用AU打开
Mp3Stego
1 2 3 4 5 6 7
cd C:\Users\13964\Desktop\Misc\虚假的MP3Stego\真实的MP3Stego