Respecto al 2, busca y encontrarás:
http://www.htcmania.com/showthread.php?t=952584 (EDITO: es lo que comentaba kriogeN

)
Respecto a almacenar la contraseña en el servidor, no es la práctica habitual, y de hecho es pecado guardarla en claro aunque muchos lo hagan. Tampoco se almacena cifrada, lo que se almacena es un "hash" de la contraseña. Un hash es una función que a la misma entrada devuelve siempre la misma salida, pero conociendo la salida es imposible averiguar la entrada salvo probando distintas entradas (fuerza bruta, diccionarios, etc.) a ver si coincide la salida. Ejemplos, MD5 o SHA-1
Así, envías las credenciales al servidor (sea la contraseña, o el token, o lo que sea que pruebe que es el usuario), el servidor hace el hash y comprueba si en la base de datos es lo mismo. Si te atacan la base de datos, las credenciales no quedan expuestas como si estuvieran guardadas en texto plano o cifradas -si consiguieran a clave de cifrado podrían acceder a todas las contraseñas-
P.D: Poniéndose en modo paranoico (esto ya por si le interesa a alguien

), si quieres minimizar un posible ataque de robo de credenciales supuesto que accedan a la base de datos, lo ideal es hacer más difícil el uso de métodos de fuerza bruta. En ese caso, se hace un hash pero no solo de la contraseña sino de una clave secreta (del servidor), la contraseña del usuario y una ristra aleatoria de bytes (que se llama "salt" y que está asociada a ese usuario para evitar que los ataques sobre un usuario puedan valer para los demás). Y a todo eso le vuelves a aplicar la función de hash varias veces (iteraciones). Los frameworks de aplicaciones que incluyen componentes de seguridad hacen eso.