#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os from pathlib import Path from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA from base64 import b64encode, b64decode import argparse def decrypt_symmetric_key(encrypted_key, private_key_path="id_rsa"): """ Decrypts the symmetric key using the provided private key. :param encrypted_key_path: Path to the file containing the encrypted symmetric key. :param private_key_path: Path to the private RSA key file. :return: Decrypted symmetric key or None if decryption fails. """ try: with open(private_key_path, "rb") as private_key_file: private_key = RSA.import_key(private_key_file.read()) cipher_rsa = PKCS1_OAEP.new(private_key) encrypted_symmetric_key = encrypted_key.encode('utf-8') if isinstance(encrypted_key, str) else encrypted_key symmetric_key = cipher_rsa.decrypt(b64decode(encrypted_symmetric_key)) return symmetric_key except Exception as e: print(f"Error decrypting symmetric key: {e}") return None def main(): parser = argparse.ArgumentParser(description="Decrypt a symmetric key using a private RSA key.") parser.add_argument("encrypted_key", type=str, help="Encrypted symmetric key") parser.add_argument("--private_key", type=str, default="id_rsa", help="Path to the private RSA key file (default: id_rsa)") args = parser.parse_args() symmetric_key = decrypt_symmetric_key(args.encrypted_key, args.private_key) if symmetric_key: print(symmetric_key.decode('utf-8') if isinstance(symmetric_key, bytes) else symmetric_key) else: print("Failed to decrypt the symmetric key.") if __name__ == "__main__": main()