import os
import base64
import string

def generate_key(length: int) -> bytes:
    """Generate a cryptographically secure random key of the given length."""
    return os.urandom(length)

def encrypt(message: str, key: bytes) -> str:
    """Encrypt a message using XOR with a secret key and encode in uppercase alphanumeric form (Base32)."""
    message = message.lower()  # Convert to lowercase for case insensitivity
    message_bytes = message.encode()
    encrypted_bytes = bytes(m ^ k for m, k in zip(message_bytes, key))

    # Encode in Base32 (which is uppercase alphanumeric only)
    base32_encoded = base64.b32encode(encrypted_bytes).decode().rstrip('=')
    return base32_encoded

def decrypt(encrypted_str: str, key: bytes) -> str:
    """Decrypt an uppercase alphanumeric encoded message using XOR with the secret key."""
    # Decode from Base32 (adding necessary padding)
    padded_encrypted_str = encrypted_str + ('=' * ((8 - len(encrypted_str) % 8) % 8))
    encrypted_bytes = base64.b32decode(padded_encrypted_str)
    decrypted_bytes = bytes(e ^ k for e, k in zip(encrypted_bytes, key))
    return decrypted_bytes.decode().lower()  # Convert to lowercase to maintain case insensitivity

# Example Usage
message = "Your message"
key = generate_key(16)
encrypted_message = encrypt(message, key)
decrypted_message = decrypt(encrypted_message, key)

print(f"Original Message: {message}")
print(f"Encrypted Message (Uppercase Alphanumeric): {encrypted_message}")
print(f"Decrypted Message: {decrypted_message}")