Update app.py
Browse files
app.py
CHANGED
@@ -1,24 +1,23 @@
|
|
1 |
|
2 |
-
# Function to hash passkey
|
3 |
def hash_passkey(passkey):
|
4 |
return hashlib.sha256(passkey.encode()).hexdigest()
|
5 |
|
6 |
-
# Function to generate a key from passkey (for encryption)
|
7 |
def generate_key_from_passkey(passkey):
|
8 |
hashed = hashlib.sha256(passkey.encode()).digest()
|
9 |
return base64.urlsafe_b64encode(hashed[:32])
|
10 |
|
11 |
-
# Function to encrypt data
|
12 |
def encrypt_data(text, passkey):
|
13 |
key = generate_key_from_passkey(passkey)
|
14 |
cipher = Fernet(key)
|
15 |
return cipher.encrypt(text.encode()).decode()
|
16 |
|
17 |
-
# Function to decrypt data
|
18 |
def decrypt_data(encrypted_text, passkey, data_id):
|
19 |
try:
|
20 |
hashed_passkey = hash_passkey(passkey)
|
21 |
-
if
|
|
|
|
|
|
|
22 |
key = generate_key_from_passkey(passkey)
|
23 |
cipher = Fernet(key)
|
24 |
decrypted = cipher.decrypt(encrypted_text.encode()).decode()
|
@@ -33,23 +32,23 @@ def decrypt_data(encrypted_text, passkey, data_id):
|
|
33 |
streamlit.session_state.last_attempt_time = time.time()
|
34 |
return None
|
35 |
|
36 |
-
# Function to reset failed attempts
|
37 |
def reset_failed_attempts():
|
38 |
streamlit.session_state.failed_attempts = 0
|
39 |
|
40 |
-
# Function to change page
|
41 |
def change_page(page):
|
42 |
streamlit.session_state.current_page = page
|
43 |
|
|
|
|
|
44 |
def main():
|
45 |
-
# Initialize session state
|
46 |
-
if
|
47 |
streamlit.session_state.failed_attempts = 0
|
48 |
-
if
|
49 |
streamlit.session_state.stored_data = {}
|
50 |
-
if
|
51 |
streamlit.session_state.current_page = "Home"
|
52 |
-
if
|
53 |
streamlit.session_state.last_attempt_time = 0
|
54 |
|
55 |
streamlit.title("π Secure Data Encryption System")
|
@@ -59,12 +58,14 @@ def main():
|
|
59 |
choice = streamlit.sidebar.selectbox("Navigation", menu, index=menu.index(streamlit.session_state.current_page))
|
60 |
streamlit.session_state.current_page = choice
|
61 |
|
62 |
-
#
|
63 |
if streamlit.session_state.failed_attempts >= 3:
|
64 |
streamlit.session_state.current_page = "Login"
|
65 |
streamlit.warning("π Too many failed attempts! Reauthorization required.")
|
66 |
|
67 |
-
#
|
|
|
|
|
68 |
if streamlit.session_state.current_page == "Home":
|
69 |
streamlit.subheader("π Welcome to the Secure Data System")
|
70 |
streamlit.write("Use this app to **securely store and retrieve data** using unique passkeys.")
|
@@ -79,7 +80,7 @@ def main():
|
|
79 |
|
80 |
streamlit.info(f"Currently storing {len(streamlit.session_state.stored_data)} encrypted data entries.")
|
81 |
|
82 |
-
#
|
83 |
elif streamlit.session_state.current_page == "Store Data":
|
84 |
streamlit.subheader("π Store Data Securely")
|
85 |
user_data = streamlit.text_area("Enter Data:")
|
@@ -106,7 +107,7 @@ def main():
|
|
106 |
else:
|
107 |
streamlit.error("β οΈ All fields are required!")
|
108 |
|
109 |
-
#
|
110 |
elif streamlit.session_state.current_page == "Retrieve Data":
|
111 |
streamlit.subheader("π Retrieve Your Data")
|
112 |
attempts_remaining = 3 - streamlit.session_state.failed_attempts
|
@@ -137,7 +138,7 @@ def main():
|
|
137 |
else:
|
138 |
streamlit.error("β οΈ Both fields are required!")
|
139 |
|
140 |
-
#
|
141 |
elif streamlit.session_state.current_page == "Login":
|
142 |
streamlit.subheader("π Reauthorization Required")
|
143 |
|
@@ -160,6 +161,7 @@ def main():
|
|
160 |
streamlit.markdown("---")
|
161 |
streamlit.markdown("π Secure Data Encryption System | Educational Project")
|
162 |
|
163 |
-
#
|
|
|
164 |
if __name__ == "__main__":
|
165 |
main()
|
|
|
1 |
|
|
|
2 |
def hash_passkey(passkey):
|
3 |
return hashlib.sha256(passkey.encode()).hexdigest()
|
4 |
|
|
|
5 |
def generate_key_from_passkey(passkey):
|
6 |
hashed = hashlib.sha256(passkey.encode()).digest()
|
7 |
return base64.urlsafe_b64encode(hashed[:32])
|
8 |
|
|
|
9 |
def encrypt_data(text, passkey):
|
10 |
key = generate_key_from_passkey(passkey)
|
11 |
cipher = Fernet(key)
|
12 |
return cipher.encrypt(text.encode()).decode()
|
13 |
|
|
|
14 |
def decrypt_data(encrypted_text, passkey, data_id):
|
15 |
try:
|
16 |
hashed_passkey = hash_passkey(passkey)
|
17 |
+
if (
|
18 |
+
data_id in streamlit.session_state.stored_data and
|
19 |
+
streamlit.session_state.stored_data[data_id]["passkey"] == hashed_passkey
|
20 |
+
):
|
21 |
key = generate_key_from_passkey(passkey)
|
22 |
cipher = Fernet(key)
|
23 |
decrypted = cipher.decrypt(encrypted_text.encode()).decode()
|
|
|
32 |
streamlit.session_state.last_attempt_time = time.time()
|
33 |
return None
|
34 |
|
|
|
35 |
def reset_failed_attempts():
|
36 |
streamlit.session_state.failed_attempts = 0
|
37 |
|
|
|
38 |
def change_page(page):
|
39 |
streamlit.session_state.current_page = page
|
40 |
|
41 |
+
# ---------------------- Main App ----------------------
|
42 |
+
|
43 |
def main():
|
44 |
+
# Initialize session state
|
45 |
+
if "failed_attempts" not in streamlit.session_state:
|
46 |
streamlit.session_state.failed_attempts = 0
|
47 |
+
if "stored_data" not in streamlit.session_state:
|
48 |
streamlit.session_state.stored_data = {}
|
49 |
+
if "current_page" not in streamlit.session_state:
|
50 |
streamlit.session_state.current_page = "Home"
|
51 |
+
if "last_attempt_time" not in streamlit.session_state:
|
52 |
streamlit.session_state.last_attempt_time = 0
|
53 |
|
54 |
streamlit.title("π Secure Data Encryption System")
|
|
|
58 |
choice = streamlit.sidebar.selectbox("Navigation", menu, index=menu.index(streamlit.session_state.current_page))
|
59 |
streamlit.session_state.current_page = choice
|
60 |
|
61 |
+
# Handle lockout
|
62 |
if streamlit.session_state.failed_attempts >= 3:
|
63 |
streamlit.session_state.current_page = "Login"
|
64 |
streamlit.warning("π Too many failed attempts! Reauthorization required.")
|
65 |
|
66 |
+
# ---------------------- Pages ----------------------
|
67 |
+
|
68 |
+
# Home Page
|
69 |
if streamlit.session_state.current_page == "Home":
|
70 |
streamlit.subheader("π Welcome to the Secure Data System")
|
71 |
streamlit.write("Use this app to **securely store and retrieve data** using unique passkeys.")
|
|
|
80 |
|
81 |
streamlit.info(f"Currently storing {len(streamlit.session_state.stored_data)} encrypted data entries.")
|
82 |
|
83 |
+
# Store Data Page
|
84 |
elif streamlit.session_state.current_page == "Store Data":
|
85 |
streamlit.subheader("π Store Data Securely")
|
86 |
user_data = streamlit.text_area("Enter Data:")
|
|
|
107 |
else:
|
108 |
streamlit.error("β οΈ All fields are required!")
|
109 |
|
110 |
+
# Retrieve Data Page
|
111 |
elif streamlit.session_state.current_page == "Retrieve Data":
|
112 |
streamlit.subheader("π Retrieve Your Data")
|
113 |
attempts_remaining = 3 - streamlit.session_state.failed_attempts
|
|
|
138 |
else:
|
139 |
streamlit.error("β οΈ Both fields are required!")
|
140 |
|
141 |
+
# Login Page
|
142 |
elif streamlit.session_state.current_page == "Login":
|
143 |
streamlit.subheader("π Reauthorization Required")
|
144 |
|
|
|
161 |
streamlit.markdown("---")
|
162 |
streamlit.markdown("π Secure Data Encryption System | Educational Project")
|
163 |
|
164 |
+
# ---------------------- Entry Point ----------------------
|
165 |
+
|
166 |
if __name__ == "__main__":
|
167 |
main()
|