#!/usr/bin/env python3 """ 身份证号解密工具 仅供管理员在必要时使用,用于解密数据库中的身份证号 需要配置正确的AES密钥 """ import sys import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 添加项目路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app.services.encryption_service import encryption_service from app.database import SessionLocal from app.models.user import User def decrypt_user_id_card(user_id: str = None, username: str = None): """ 解密用户的身份证号 Args: user_id: 用户ID username: 用户名(如果不提供user_id) """ db = SessionLocal() try: # 查询用户 if user_id: user = db.query(User).filter(User.id == user_id).first() elif username: user = db.query(User).filter(User.username == username).first() else: print("错误: 必须提供 user_id 或 username") return if not user: print("错误: 用户不存在") return if not user.id_card: print(f"用户 {user.username} 未提交身份证号") return # 解密身份证号 try: decrypted_id_card = encryption_service.aes_decrypt(user.id_card) print("=" * 60) print("用户信息") print("=" * 60) print(f"用户ID: {user.id}") print(f"用户名: {user.username}") print(f"真实姓名: {user.real_name or '未填写'}") print(f"认证状态: {user.is_verified}") print(f"身份证号: {decrypted_id_card}") print("=" * 60) except Exception as e: print(f"解密失败: {str(e)}") print("可能原因:") print("1. AES密钥不正确") print("2. 数据已损坏") print("3. 这是旧数据(未加密)") finally: db.close() def list_verified_users(): """列出所有已认证的用户""" db = SessionLocal() try: users = db.query(User).filter( User.is_verified == "verified" ).all() if not users: print("没有已认证的用户") return print("=" * 80) print("已认证用户列表") print("=" * 80) print(f"{'用户ID':<40} {'用户名':<15} {'真实姓名':<10} {'身份证号':<20}") print("-" * 80) for user in users: try: if user.id_card: decrypted_id_card = encryption_service.aes_decrypt(user.id_card) else: decrypted_id_card = "未填写" except: decrypted_id_card = "解密失败" print(f"{user.id:<40} {user.username:<15} {user.real_name or '未填写':<10} {decrypted_id_card:<20}") print("=" * 80) print(f"共 {len(users)} 个已认证用户") print("=" * 80) finally: db.close() def main(): """主函数""" if len(sys.argv) < 2: print("=" * 60) print("身份证号解密工具") print("=" * 60) print() print("用法:") print(" 1. 按用户ID解密:") print(" python decrypt_id_card.py ") print() print(" 2. 按用户名解密:") print(" python decrypt_id_card.py --username ") print() print(" 3. 列出所有已认证用户:") print(" python decrypt_id_card.py --list") print() print("=" * 60) print("注意事项:") print("1. 此工具仅供管理员使用") print("2. 需要正确配置 AES_ENCRYPTION_KEY") print("3. 请妥善保管解密后的数据") print("=" * 60) return command = sys.argv[1] if command == "--list": list_verified_users() elif command == "--username": if len(sys.argv) < 3: print("错误: 请提供用户名") return decrypt_user_id_card(username=sys.argv[2]) else: # 假设是user_id decrypt_user_id_card(user_id=command) if __name__ == "__main__": main()