import gradio as gr import hashlib import ipaddress import base64 import re # --- Tab 1: Math Logic --- def calculate(num1, operation, num2): try: if operation == "Add (+)": return num1 + num2 if operation == "Subtract (-)": return num1 - num2 if operation == "Multiply (*)": return num1 * num2 if operation == "Divide (/)": return num1 / num2 if num2 != 0 else "Error: Division by zero" if operation == "Power (x^y)": return num1 ** num2 except Exception as e: return f"Error: {str(e)}" # --- Tab 2: Hashing & Encoding --- def crypto_tools(text, action): if not text: return "Please enter some text." try: if action == "Generate MD5 & SHA-256": md5_hash = hashlib.md5(text.encode()).hexdigest() sha256_hash = hashlib.sha256(text.encode()).hexdigest() return f"MD5:\n{md5_hash}\n\nSHA-256:\n{sha256_hash}" elif action == "Encode to Base64": return base64.b64encode(text.encode()).decode() elif action == "Decode from Base64": return base64.b64decode(text.encode()).decode() except Exception as e: return f"Error decoding: Make sure it is valid Base64." # --- Tab 3: Network Tools --- def subnet_calculator(ip_with_cidr): try: network = ipaddress.IPv4Network(ip_with_cidr, strict=False) result = ( f"Network Address: {network.network_address}\n" f"Broadcast Address: {network.broadcast_address}\n" f"Netmask: {network.netmask}\n" f"Total Usable Hosts: {network.num_addresses - 2}" ) return result except Exception as e: return "Invalid IP/CIDR format. Example: 192.168.1.0/24" # --- Tab 4: Password Analyzer --- def check_password_strength(password): if not password: return "Enter a password to analyze." score = 0 feedback = [] if len(password) >= 8: score += 1 else: feedback.append("- Too short (needs 8+ chars)") if re.search(r"[A-Z]", password): score += 1 else: feedback.append("- Missing uppercase letter") if re.search(r"[a-z]", password): score += 1 else: feedback.append("- Missing lowercase letter") if re.search(r"[0-9]", password): score += 1 else: feedback.append("- Missing number") if re.search(r"[!@#$%^&*(),.?\":{}|<>]", password): score += 1 else: feedback.append("- Missing special character") if score == 5: return "🟢 STRONG PASSWORD" elif score >= 3: return f"🟡 MEDIUM PASSWORD\nImprovements needed:\n" + "\n".join(feedback) else: return f"🔴 WEAK PASSWORD\nImprovements needed:\n" + "\n".join(feedback) # --- Build the UI using Gradio Blocks --- with gr.Blocks(theme=gr.themes.Monochrome()) as demo: gr.Markdown("# 🛡️ Cybersecurity Multi-Tool Toolkit") gr.Markdown("A specialized calculator and toolkit for cybersecurity analysis.") # Tab 1 with gr.Tab("Standard Calculator"): with gr.Row(): with gr.Column(): num1 = gr.Number(label="First Number") operation = gr.Radio(["Add (+)", "Subtract (-)", "Multiply (*)", "Divide (/)", "Power (x^y)"], label="Operation") num2 = gr.Number(label="Second Number") calc_btn = gr.Button("Calculate") with gr.Column(): calc_result = gr.Textbox(label="Result", interactive=False) calc_btn.click(fn=calculate, inputs=[num1, operation, num2], outputs=calc_result) # Tab 2 with gr.Tab("Cryptography & Encoding"): with gr.Row(): with gr.Column(): text_input = gr.Textbox(label="Enter text or payload") crypto_action = gr.Radio(["Generate MD5 & SHA-256", "Encode to Base64", "Decode from Base64"], label="Action") crypto_btn = gr.Button("Execute") with gr.Column(): crypto_result = gr.Textbox(label="Output", interactive=False, lines=6) crypto_btn.click(fn=crypto_tools, inputs=[text_input, crypto_action], outputs=crypto_result) # Tab 3 with gr.Tab("Network Tools"): with gr.Row(): with gr.Column(): ip_input = gr.Textbox(label="Enter IP with CIDR (e.g., 192.168.1.5/24)") ip_btn = gr.Button("Analyze Subnet") with gr.Column(): ip_result = gr.Textbox(label="Subnet Details", interactive=False, lines=5) ip_btn.click(fn=subnet_calculator, inputs=ip_input, outputs=ip_result) # Tab 4 with gr.Tab("Password Analyzer"): with gr.Row(): with gr.Column(): pwd_input = gr.Textbox(label="Enter Password", type="password") pwd_btn = gr.Button("Check Strength") with gr.Column(): pwd_result = gr.Textbox(label="Analysis Result", interactive=False, lines=5) pwd_btn.click(fn=check_password_strength, inputs=pwd_input, outputs=pwd_result) # Launch the app if __name__ == "__main__": demo.launch()