CoolFace
Apppublic

eaglelandsonce/Python_SHH_Encryption

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py95 linesDownload Raw Back to root
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