GeminiFan207 commited on
Commit
628e71e
·
verified ·
1 Parent(s): d9f3a1b

Delete data_security.py

Browse files
Files changed (1) hide show
  1. data_security.py +0 -180
data_security.py DELETED
@@ -1,180 +0,0 @@
1
- import os
2
- import logging
3
- from cryptography.hazmat.primitives import hashes
4
- from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
5
- from cryptography.hazmat.primitives.asymmetric import rsa
6
- from cryptography.hazmat.primitives import serialization
7
- from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
8
- from cryptography.hazmat.backends import default_backend
9
- from cryptography.hazmat.primitives import padding
10
- from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
11
- import base64
12
-
13
- # Configure logging
14
- logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
15
-
16
- # Secure key derivation using PBKDF2
17
- def derive_key(password: str, salt: bytes) -> bytes:
18
- try:
19
- kdf = PBKDF2HMAC(
20
- algorithm=hashes.SHA256(),
21
- length=32,
22
- salt=salt,
23
- iterations=100000,
24
- backend=default_backend()
25
- )
26
- return kdf.derive(password.encode())
27
- except Exception as e:
28
- logging.error(f"Key derivation failed: {e}")
29
- raise
30
-
31
- # Generate a strong RSA public-private key pair
32
- def generate_rsa_keys():
33
- try:
34
- private_key = rsa.generate_private_key(
35
- public_exponent=65537,
36
- key_size=2048,
37
- backend=default_backend()
38
- )
39
- public_key = private_key.public_key()
40
-
41
- private_pem = private_key.private_bytes(
42
- encoding=serialization.Encoding.PEM,
43
- format=serialization.PrivateFormat.TraditionalOpenSSL,
44
- encryption_algorithm=serialization.NoEncryption()
45
- )
46
-
47
- public_pem = public_key.public_bytes(
48
- encoding=serialization.Encoding.PEM,
49
- format=serialization.PublicFormat.SubjectPublicKeyInfo
50
- )
51
-
52
- return private_pem, public_pem
53
- except Exception as e:
54
- logging.error(f"RSA key generation failed: {e}")
55
- raise
56
-
57
- # Encrypt data using AES
58
- def aes_encrypt(data: bytes, key: bytes) -> bytes:
59
- try:
60
- iv = os.urandom(16)
61
- cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
62
- encryptor = cipher.encryptor()
63
-
64
- padder = padding.PKCS7(algorithms.AES.block_size).padder()
65
- padded_data = padder.update(data) + padder.finalize()
66
-
67
- encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
68
- return iv + encrypted_data
69
- except Exception as e:
70
- logging.error(f"AES encryption failed: {e}")
71
- raise
72
-
73
- # Decrypt data using AES
74
- def aes_decrypt(encrypted_data: bytes, key: bytes) -> bytes:
75
- try:
76
- iv = encrypted_data[:16]
77
- cipher_data = encrypted_data[16:]
78
-
79
- cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
80
- decryptor = cipher.decryptor()
81
-
82
- decrypted_data = decryptor.update(cipher_data) + decryptor.finalize()
83
-
84
- unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
85
- unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()
86
-
87
- return unpadded_data
88
- except Exception as e:
89
- logging.error(f"AES decryption failed: {e}")
90
- raise
91
-
92
- # RSA encryption and decryption
93
- def rsa_encrypt(public_key: bytes, data: bytes) -> bytes:
94
- try:
95
- public_key_obj = serialization.load_pem_public_key(public_key, backend=default_backend())
96
- encrypted_data = public_key_obj.encrypt(
97
- data,
98
- rsa.OAEP(
99
- mgf=rsa.MGF1(algorithm=hashes.SHA256()),
100
- algorithm=hashes.SHA256(),
101
- label=None
102
- )
103
- )
104
- return encrypted_data
105
- except Exception as e:
106
- logging.error(f"RSA encryption failed: {e}")
107
- raise
108
-
109
- def rsa_decrypt(private_key: bytes, encrypted_data: bytes) -> bytes:
110
- try:
111
- private_key_obj = serialization.load_pem_private_key(private_key, password=None, backend=default_backend())
112
- decrypted_data = private_key_obj.decrypt(
113
- encrypted_data,
114
- rsa.OAEP(
115
- mgf=rsa.MGF1(algorithm=hashes.SHA256()),
116
- algorithm=hashes.SHA256(),
117
- label=None
118
- )
119
- )
120
- return decrypted_data
121
- except Exception as e:
122
- logging.error(f"RSA decryption failed: {e}")
123
- raise
124
-
125
- # Securely store and retrieve sensitive information
126
- def store_encrypted_data(file_path: str, data: bytes, encryption_key: bytes):
127
- try:
128
- encrypted_data = aes_encrypt(data, encryption_key)
129
- with open(file_path, 'wb') as file:
130
- file.write(encrypted_data)
131
- logging.info(f"Data securely stored at {file_path}")
132
- except Exception as e:
133
- logging.error(f"Failed to store encrypted data: {e}")
134
- raise
135
-
136
- def retrieve_encrypted_data(file_path: str, encryption_key: bytes) -> bytes:
137
- try:
138
- with open(file_path, 'rb') as file:
139
- encrypted_data = file.read()
140
- return aes_decrypt(encrypted_data, encryption_key)
141
- except Exception as e:
142
- logging.error(f"Failed to retrieve encrypted data: {e}")
143
- raise
144
-
145
- # Ensure strong random number generation for cryptographic operations
146
- def secure_random_bytes(size: int) -> bytes:
147
- try:
148
- return os.urandom(size)
149
- except Exception as e:
150
- logging.error(f"Random byte generation failed: {e}")
151
- raise
152
-
153
- # Salting passwords for extra protection
154
- def salt_password(password: str) -> tuple:
155
- try:
156
- salt = secure_random_bytes(16)
157
- salted_password = derive_key(password, salt)
158
- return salted_password, salt
159
- except Exception as e:
160
- logging.error(f"Password salting failed: {e}")
161
- raise
162
-
163
- # Key storage for private key management (secure storage)
164
- def store_rsa_private_key(private_key: bytes, file_path: str):
165
- try:
166
- with open(file_path, 'wb') as file:
167
- file.write(private_key)
168
- logging.info(f"RSA private key securely stored at {file_path}")
169
- except Exception as e:
170
- logging.error(f"Failed to store RSA private key: {e}")
171
- raise
172
-
173
- def retrieve_rsa_private_key(file_path: str) -> bytes:
174
- try:
175
- with open(file_path, 'rb') as file:
176
- private_key = file.read()
177
- return private_key
178
- except Exception as e:
179
- logging.error(f"Failed to retrieve RSA private key: {e}")
180
- raise