45 lines
1.7 KiB
Python
Executable File
45 lines
1.7 KiB
Python
Executable File
#!/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()
|