Um das Problem mal praktisch anzugehen würde ich folgende Vorgehensweise vorschlagen:
1. Du erstellst innerhalb einer DB eine Tabelle mit den folgenden Feldern:
Feld1: (varchar) password_1
Feld2: (varchar) password_2
Feld3: (varchar) guid
Feld4: (Timestamp) datetime_read
Die Datensätze könnten das bsw. wie folgt in der DB stehen:
pwdteilx1 | pwdteilx2 | adsflasdf9-asdfasdf-ad98734ö | null
pwdteily1 | pwdteily2 | l923445234-olijert3-34983423 | 06.10.2007
Als nächstes schreibt man in PHP / ASP whatever eine einfache Webseite, die parametrisiert über eine guid aufgerufen wird:
Also z.B.:
http://localhost/password_1.aspx?guid=adsflasdf9-asdfasdf-ad98734ö&pwdpart=0
Der Aufruf der Webseite rendert automatisch den ersten Teil des Passworts für diese Guid:
also: pwdteilx1
Dann noch ein link der die gleiche Seite nochmal aufruft für den zweiten teil des Passworts:
http://localhost/password_1.aspx?guid=adsflasdf9-asdfasdf-ad98734ö&pwdpart=1
Rendert:
also: pwdteilx2
Der Aufruf des letzten Password Fragments setzt dann automatisch den current timestamp um wiederholge Aufrufe der Seite mit dieser Guid zu unterbinden.
Dadurch das das Password auf 2 (bzw. n) unterschiedlichen Seiten dargestellt wird, ist sichergestellt dass es nicht ausgedruckt wird (bzw. nur sehr umständlich).
Der automatisch gesetzte Timestamp stellt sicher, dass jedes Passwort nur einmal aufgerufen werden kann.
Die User sollte bestenfalls eine Email mit einem Link bekommen, der den jeweiligen GUID der DB enthält.
Enjoy!