Another new utility: getpass() prompts for a password, with echo off.
Also contains getuser(), which returns the username (not prompting though).
These work on Unix and Windows!
diff --git a/Lib/getpass.py b/Lib/getpass.py
new file mode 100644
index 0000000..44e78c2
--- /dev/null
+++ b/Lib/getpass.py
@@ -0,0 +1,79 @@
+"""Utilities to get a password and/or the current user name.
+
+getpass(prompt) - prompt for a password, with echo turned off
+getuser() - get the user name from the environment or password database
+
+Authors: Piers Lauder (original)
+         Guido van Rossum (Windows support and cleanup)
+"""
+
+
+def getpass(prompt='Password: '):
+	"""Prompt for a password, with echo turned off.
+
+	Restore terminal settings at end.
+
+	On Windows, this calls win_getpass(prompt) which uses the
+	msvcrt module to get the same effect.
+
+	"""
+
+	import sys
+	try:
+		import termios, TERMIOS
+	except ImportError:
+		return win_getpass(prompt)
+
+	fd = sys.stdin.fileno()
+	old = termios.tcgetattr(fd)	# a copy to save
+	new = old[:]
+
+	new[3] = new[3] & ~TERMIOS.ECHO	# 3 == 'lflags'
+	try:
+		termios.tcsetattr(fd, TERMIOS.TCSADRAIN, new)
+		try: passwd = raw_input(prompt)
+		except KeyboardInterrupt: passwd = None
+	finally:
+		termios.tcsetattr(fd, TERMIOS.TCSADRAIN, old)
+
+	sys.stdout.write('\n')
+	return passwd
+
+
+def win_getpass(prompt='Password: '):
+	"""Prompt for password with echo off, using Windows getch()."""
+	import msvcrt
+	for c in prompt:
+		msvcrt.putch(c)
+	pw = ""
+	while 1:
+		c = msvcrt.getch()
+		if c == '\r' or c == '\n':
+			break
+		if c == '\b':
+			pw = pw[:-1]
+		else:
+			pw = pw + c
+	msvcrt.putch('\r')
+	msvcrt.putch('\n')
+	return pw
+
+
+def getuser():
+	"""Get the username from the environment or password database.
+
+	First try various environment variables, then the password
+	database.  This works on Windows as long as USERNAME is set.
+
+	"""
+
+	import os
+
+	for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
+		user = os.environ.get(name)
+		if user:
+			return user
+
+	# If this fails, the exception will "explain" why
+	import pwd
+	return pwd.getpwuid(os.getuid())[0]