-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathscript (2).py
More file actions
99 lines (86 loc) · 3.76 KB
/
script (2).py
File metadata and controls
99 lines (86 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Now let's create the secure messaging system
import base64
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import os
import json
from datetime import datetime
class SecureMessenger:
def __init__(self, password):
"""Initialize the messenger with a password-derived key"""
self.password = password.encode()
self.key = self._derive_key(self.password)
self.cipher_suite = Fernet(self.key)
def _derive_key(self, password):
"""Derive encryption key from password"""
salt = b'stable_salt_for_demo' # In production, use random salt per user
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
)
key = base64.urlsafe_b64encode(kdf.derive(password))
return key
def encrypt_message(self, message):
"""Encrypt a plaintext message"""
try:
encrypted_message = self.cipher_suite.encrypt(message.encode())
# Encode to base64 for easier transmission/storage
return base64.urlsafe_b64encode(encrypted_message).decode()
except Exception as e:
return f"Encryption error: {str(e)}"
def decrypt_message(self, encrypted_message):
"""Decrypt an encrypted message"""
try:
# Decode from base64
encrypted_data = base64.urlsafe_b64decode(encrypted_message.encode())
decrypted_message = self.cipher_suite.decrypt(encrypted_data)
return decrypted_message.decode()
except Exception as e:
return f"Decryption error: {str(e)}"
def create_message_package(self, message, sender_name):
"""Create a complete message package with metadata"""
encrypted_msg = self.encrypt_message(message)
package = {
"sender": sender_name,
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"encrypted_message": encrypted_msg
}
return json.dumps(package, indent=2)
def read_message_package(self, package_json):
"""Read and decrypt a message package"""
try:
package = json.loads(package_json)
decrypted_msg = self.decrypt_message(package["encrypted_message"])
return {
"sender": package["sender"],
"timestamp": package["timestamp"],
"message": decrypted_msg
}
except Exception as e:
return f"Package reading error: {str(e)}"
# Demo the encryption system
print("=== Secure Messenger Demo ===\n")
# Create messenger instances for two users with the same password
password = "MySecretPassword123!"
alice_messenger = SecureMessenger(password)
bob_messenger = SecureMessenger(password)
# Alice sends a message
original_message = "Hello Bob! This is a secret message. Meet me at the cafe at 3 PM."
print(f"Original message from Alice: {original_message}\n")
# Create encrypted message package
encrypted_package = alice_messenger.create_message_package(original_message, "Alice")
print(f"Encrypted message package:\n{encrypted_package}\n")
# Bob receives and decrypts the message
decrypted_package = bob_messenger.read_message_package(encrypted_package)
print(f"Decrypted message received by Bob:")
print(f"From: {decrypted_package['sender']}")
print(f"Time: {decrypted_package['timestamp']}")
print(f"Message: {decrypted_package['message']}\n")
# Test with wrong password
print("=== Testing with wrong password ===")
wrong_messenger = SecureMessenger("WrongPassword")
failed_decrypt = wrong_messenger.read_message_package(encrypted_package)
print(f"Decryption with wrong password: {failed_decrypt}")