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()
|