Seedance 2.0即梦专业版:企业级AI视频生成的工程化实践
2026/6/24 11:32:04
bytes_to_long(key)>>12的值输出:
[140, 96, 112, 178, 38, 180, 158, 240, 179, 202, 251, 138, 188, 185, 23, 67, 163, 22, 150, 18, 143, 212, 93, 87, 209, 139, 92, 252, 55, 137, 6, 231, 105, 12, 65, 59, 223, 25, 179, 101, 19, 215] 2669175714787937print(bytes_to_long(key) >> 12) # 输出: 2669175714787937random.seed(int(hashlib.md5(key).hexdigest(), 16))random而非密码学安全的secrets模块os.urandom(8)虽然安全,但后续处理破坏了安全性x >> n=floor(x / 2^n),丢弃低n位x << n=x * 2^n,低位补0original = (shifted << n) | low_n_bitsrandom:用于模拟/游戏,不适合加密secrets.SystemRandom:基于操作系统熵源,适合加密ciphertext = plaintext ^ random_byteplaintext = ciphertext ^ random_byte(自逆操作)key_high = 2669175714787937(密钥高52位)(key_high << 12) | low_12_bitslow_12_bits从0到4095import random import hashlib from Crypto.Util.number import long_to_bytes # 1. 已知常量 ciphertext = [140, 96, 112, 178, 38, 180, 158, 240, 179, 202, 251, 138, 188, 185, 23, 67, 163, 22, 150, 18, 143, 212, 93, 87, 209, 139, 92, 252, 55, 137, 6, 231, 105, 12, 65, 59, 223, 25, 179, 101, 19, 215] known_high_bits = 2669175714787937 # key >> 12 的值 # 2. 还原原题rand函数 def rand(rng): """完全复制原题中的随机函数""" return rng - random.randrange(rng) # 3. 解密核心函数 def decrypt_with_key(key_bytes): """使用给定密钥尝试解密""" # 3.1 重现随机种子 seed = int(hashlib.md5(key_bytes).hexdigest(), 16) random.seed(seed) # 3.2 严格模拟加密过程 flag_chars = [] for c in ciphertext: rand(256) # 丢弃一个随机数(与加密过程完全一致) r = rand(256) % 256 # 获取用于加密的随机数,256%256=0 plain_byte = c ^ r flag_chars.append(plain_byte) # 3.3 尝试转换为可读字符串 try: return bytes(flag_chars).decode('utf-8') except UnicodeDecodeError: return None # 4. 暴力破解主循环 print("[*] 开始暴力破解,尝试 4096 种密钥组合...") solution_found = False for low_12 in range(4096): # 4.1 重构完整64位密钥 full_key_value = (known_high_bits << 12) | low_12 key_bytes = long_to_bytes(full_key_value, 8) # 明确8字节长度 # 4.2 尝试解密 try: flag = decrypt_with_key(key_bytes) except Exception as e: continue # 4.3 验证解密结果 if flag and flag.startswith('flag{') and '}' in flag: print(f"\n[+] 破解成功! 密钥低12位: {low_12}") print(f"[+] 完整密钥 (hex): {key_bytes.hex()}") print(f"[+] Flag: {flag}") print(f"[+] 尝试次数: {low_12 + 1}/4096") solution_found = True break # 4.4 进度提示 if low_12 % 500 == 0 and low_12 > 0: print(f"[*] 已尝试 {low_12}/4096 种组合...") if not solution_found: print("[-] 破解失败!未找到有效flag。")执行结果:
[*] 开始暴力破解,尝试 4096 种密钥组合... [*] 已尝试 500/4096 种组合... [*] 已尝试 1000/4096 种组合... [*] 已尝试 1500/4096 种组合... [*] 已尝试 2000/4096 种组合... [*] 已尝试 2500/4096 种组合... [+] 破解成功! 密钥低12位: 2935 [+] 完整密钥 (hex): 97b99e652b261b77 [+] Flag: flag{e319a58c-4dd6-4e6a-a3fb-f4b0d339faba} [+] 尝试次数: 2936/4096