eaglelandsonce/Python_SHH_Encryption
0
1import streamlit as st2from cryptography.hazmat.primitives.asymmetric import rsa, padding3from cryptography.hazmat.primitives import serialization, hashes4from cryptography.hazmat.backends import default_backend5 6# --- Cryptographic helper functions ---7def generate_rsa_keypair():8 """Generate a 2048-bit RSA key pair."""9 private_key = rsa.generate_private_key(10 public_exponent=65537,11 key_size=2048,12 backend=default_backend()13 )14 return private_key, private_key.public_key()15 16 17def encrypt_message(pubkey, message: bytes) -> bytes:18 """Encrypt with RSA OAEP."""19 return pubkey.encrypt(20 message,21 padding.OAEP(22 mgf=padding.MGF1(algorithm=hashes.SHA256()),23 algorithm=hashes.SHA256(),24 label=None25 )26 )27 28 29def decrypt_message(privkey, ciphertext: bytes) -> bytes:30 """Decrypt with RSA OAEP."""31 return privkey.decrypt(32 ciphertext,33 padding.OAEP(34 mgf=padding.MGF1(algorithm=hashes.SHA256()),35 algorithm=hashes.SHA256(),36 label=None37 )38 )39 40 41def derive_shared_secret(pubkey1, pubkey2) -> bytes:42 """43 Simple “shared secret”: SHA-256( server_pubkey_bytes || client_pubkey_bytes ).44 (Real SSH uses Diffie–Hellman or ECDH.)45 """46 pk1_bytes = pubkey1.public_bytes(47 encoding=serialization.Encoding.DER,48 format=serialization.PublicFormat.SubjectPublicKeyInfo49 )50 pk2_bytes = pubkey2.public_bytes(51 encoding=serialization.Encoding.DER,52 format=serialization.PublicFormat.SubjectPublicKeyInfo53 )54 digest = hashes.Hash(hashes.SHA256(), backend=default_backend())55 digest.update(pk1_bytes + pk2_bytes)56 return digest.finalize()57 58# --- Streamlit interface ---59def main():60 st.title("SSH‑Style Key Exchange Simulation")61 st.write("This demo simulates a basic SSH-like handshake using RSA key pairs.")62 63 client_msg = st.text_input("Client message:", value="Hello from client!")64 server_msg = st.text_input("Server message:", value="Hello from server!")65 66 if st.button("Run handshake"):67 # Generate keys68 server_priv, server_pub = generate_rsa_keypair()69 client_priv, client_pub = generate_rsa_keypair()70 71 # Client → Server72 enc_to_server = encrypt_message(server_pub, client_msg.encode())73 dec_at_server = decrypt_message(server_priv, enc_to_server)74 75 # Server → Client76 enc_to_client = encrypt_message(client_pub, server_msg.encode())77 dec_at_client = decrypt_message(client_priv, enc_to_client)78 79 # Shared secret derivation80 shared_secret = derive_shared_secret(server_pub, client_pub)81 82 st.subheader("Client → Server")83 st.write("Encrypted (first 30 bytes):", enc_to_server[:30], "...")84 st.write("Decrypted message:", dec_at_server.decode())85 86 st.subheader("Server → Client")87 st.write("Encrypted (first 30 bytes):", enc_to_client[:30], "...")88 st.write("Decrypted message:", dec_at_client.decode())89 90 st.subheader("Derived Shared Secret (SHA-256 hex)")91 st.code(shared_secret.hex())92 93if __name__ == "__main__":94 main()95 