Não, não há como usar o JavaScript do navegador para melhorar a segurança da senha. Eu recomendo fortemente que você leia este artigo . No seu caso, o maior problema é o problema do ovo da galinha:
Qual é o "problema do ovo da galinha" em fornecer criptografia Javascript?
Se você não confia na rede para fornecer uma senha ou, pior, não confia no servidor para não manter os segredos do usuário, você não pode confiar neles para fornecer o código de segurança. O mesmo invasor que estava farejando senhas ou lendo diários antes de você introduzir a criptografia está simplesmente sequestrando o código criptográfico depois de você fazer isso.
[...]
Por que não posso usar TLS / SSL para fornecer o código criptográfico Javascript?
Você pode. É mais difícil do que parece, mas você transmite criptografia Javascript com segurança para um navegador usando SSL. O problema é que, tendo estabelecido um canal seguro com SSL, você não precisa mais da criptografia Javascript; você tem criptografia "real".
O que leva a isso:
O problema com a execução de código criptográfico em Javascript é que praticamente qualquer função da qual a criptografia depende pode ser substituída silenciosamente por qualquer parte do conteúdo usado para construir a página de hospedagem. A criptografia de segurança pode ser desfeita no início do processo (gerando números aleatórios falsos ou adulterando constantes e parâmetros usados por algoritmos) ou posteriormente (devolvendo o material da chave a um invasor), ou --- no cenário mais provável --- contornando a criptografia inteiramente.
Não existe uma maneira confiável para qualquer parte do código Javascript verificar seu ambiente de execução. O código criptográfico Javascript não pode perguntar: "Estou realmente lidando com um gerador de números aleatórios ou com algum fac-símile fornecido por um invasor?" E certamente não pode afirmar "ninguém tem permissão para fazer nada com este segredo criptográfico, exceto de maneiras que eu, o autor, aprovo". Essas são duas propriedades que geralmente são fornecidas em outros ambientes que usam criptografia e são impossíveis em Javascript.
Basicamente, o problema é este:
- Seus clientes não confiam em seus servidores, então eles desejam adicionar código de segurança extra.
- Esse código de segurança é fornecido por seus servidores (aqueles em que eles não confiam).
Ou alternativamente,
- Seus clientes não confiam em SSL, então eles querem que você use um código de segurança extra.
- Esse código de segurança é entregue via SSL.
Nota: Além disso, SHA-256 não é adequado para isso, já que é tão fácil usar a força bruta em senhas sem sal e não iteradas . Se você decidir fazer isso de qualquer maneira, procure uma implementação de bcrypt , scrypt ou PBKDF2 .