muhammadshaheryar commited on
Commit
307b2ee
Β·
verified Β·
1 Parent(s): 56543e1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -18
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 data_id in streamlit.session_state.stored_data and streamlit.session_state.stored_data[data_id]["passkey"] == hashed_passkey:
 
 
 
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 variables
46
- if 'failed_attempts' not in streamlit.session_state:
47
  streamlit.session_state.failed_attempts = 0
48
- if 'stored_data' not in streamlit.session_state:
49
  streamlit.session_state.stored_data = {}
50
- if 'current_page' not in streamlit.session_state:
51
  streamlit.session_state.current_page = "Home"
52
- if 'last_attempt_time' not in streamlit.session_state:
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
- # Block if too many failed attempts
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
- # HOME PAGE
 
 
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
- # STORE DATA PAGE
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
- # RETRIEVE DATA PAGE
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
- # LOGIN PAGE
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
- # Run app
 
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()