Usar JavaScript para alterar a senha antes do envio pela rede é o mínimo que eu esperaria. Seria melhor ainda se você usasse CRAM-MD5 , HTTP Digest , ou SSL (especialistas gastam milhares de horas transbordando as implicações de segurança desses protocolos).
Você absolutamente deve usar sal . Se você não as senhas são facilmente revertidas usando mesas de arco-íris . Um sal muito simples que funciona razoavelmente bem, mande o servidor enviar um sal aleatório com a página. MD5 a senha, então MD5 o primeiro hash e o sal juntos. No lado do servidor, você pode armazenar a senha MD5 e executar um MD5 rápido no hash armazenado e no sal da página; comparar e autenticar adequadamente. Esse tipo de sal é conhecido como nonce . Você também deve adicionar um sal de longo domínio para a senha original e a armazenada no servidor.
Portanto, um "bom" caminho (curto de SSL e os outros mencionados acima) é:
A = MD5 ( Password + Realm)
B = MD5 ( A + Nonce)
Envie B pelo fio. Mantenha A armazenado no servidor. Ao definir A em primeiro lugar, use uma criptografia reversível simples, como ROT ou XOR. Pessoalmente, eu consideraria qualquer coisa menos do que isso irresponsável, porque muitos usuários tolamente usam exatamente a mesma senha para quase tudo ( mesmo Jeff - fundador do site - fez isso ).