#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
日志文件解密工具
加密算法：自同步 XOR 异或加密
- 前3个字节（0xA5 0xF1 0xF5）是文件头标识，不加密
- 从第4个字节开始，根据解密后的原始字节奇偶性选择密钥：
  - 原始字节是奇数 → XOR 0xEF
  - 原始字节是偶数 → XOR 0xA5
"""

def decrypt_log(input_file, output_file):
    """解密日志文件"""
    # 读取加密文件
    with open(input_file, 'rb') as f:
        encrypted_data = f.read()
    
    # 解密
    decrypted_data = bytearray()
    for i, encrypted_byte in enumerate(encrypted_data):
        if i < 3:
            # 前3个字节是文件头，不加密
            decrypted_data.append(encrypted_byte)
        else:
            # 尝试两个密钥，看哪个能得到合理结果
            # 先尝试 0xEF（用于奇数原始字节）
            test_byte = encrypted_byte ^ 0xEF
            if test_byte % 2 == 1:  # 解密后是奇数，说明密钥正确
                decrypted_data.append(test_byte)
            else:
                # 使用 0xA5（用于偶数原始字节）
                decrypted_data.append(encrypted_byte ^ 0xA5)
    
    # 写入解密文件
    with open(output_file, 'wb') as f:
        f.write(decrypted_data)
    
    print(f"[OK] 解密完成！")
    print(f"  输入文件: {input_file}")
    print(f"  输出文件: {output_file}")
    print(f"  文件大小: {len(encrypted_data):,} 字节")

if __name__ == '__main__':
    import sys
    
    if len(sys.argv) != 3:
        print("用法: python decrypt.py <加密文件> <输出文件>")
        print("示例: python decrypt.py Client.log Client_decrypted.log")
        sys.exit(1)
    
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    
    try:
        decrypt_log(input_file, output_file)
    except Exception as e:
        print(f"[ERROR] 解密失败: {e}")
        sys.exit(1)
