Übrigens, MD5 ist keine gute Idee, da dieser Algorithmus nicht mehr als kryptografisch sicher gilt. Auch SHA-1 wurde möglicherweise bereits gebrochen, sodass nicht ausgeschlossen werden kann, dass es möglich ist, eine andere Datenfolge zu finden, die den selben Hash-Wert hat. Besser ist da SHA-2, doch da gibt es glaube ich keine eingebaute Python-Unterstützung. Wahrscheinlich müsste man dann
pyOpenSSL benutzen. Ich habe mich mit Kryptographie nur unter Java beschäftigt, wo
BouncyCastle alle Wünsche abdeckt, die man haben könnte, sodass ich nix zu pyOpenSSL sagen kann :)
Damit zwei Parteien Informationen austauschen können, ohne das ein Dritter mitlesen kann, sollten diese verschlüsselt sein. Dazu nimmt man in der Regel einen symetrischen Schlüssel, etwa für AES mit 128 bit. Das ist ein sogenanntes "shared secret". Wenn die Parteien nicht gerade (U)SIM-Karten mit vorkonfigurierten Schlüsseln haben, müssen diese irgendwie sicher ausgetauscht werden ("key exchange"). Auch dazu gibt es bewährte und geprüfte Algorithmen, die man nicht selbst erfinden sollte. Diffie-Hellman ist so ein Verfahren, welches man aber nochmals gegen "man in the middle"-Angriffe absichern muss. Ein anderes Verfahren ist, dass die Parteien private Schlüssel kennen, sich gegenseitig die öffentlichen Schlüssel bekannt machen können und es eine zentrale Stelle gibt, der beide Seiten vertrauen und die dafür mit Hilfe von X.509-Zertifikaten bürgt, dass die Parteien die sind, die sie vorgeben. Nun kann man die Schlüsselpaare benutzen, um private Schlüssel sicher auszutauschen. Das ist die Grundlage, wie DRM-Verfahren von Microsoft oder für Handys (OMA DRM) funktionieren.
Man wird bei jedem dieser Verfahren übrigens Patente der Firmen Microsoft, Contentguard, Intertrust, Philips, Panasonic, usw. verletzen :)
Stefan