Boa tarde a todos,
Estou com a seguinte duvida, e gostaria de coletar a maior parte de experiencias possíveis, tenha a necessidade de desenvolver, uma aplicação web (JSF + Backingbean + Service + DAO + POJO) , a qual precisa criptografar todas as informações, porém me deparo com a seguinte duvida, onde ou qual a melhor arquitetura ser implementada? pois a criptografa poderia ser implementada em praticamente qualquer uma das camadas, inclusive no banco de dados, porém perderia a flexibilidade do mesmo, alguem que tenha passado por situação semelhante, talvez poderia indicar uma solução elegante ao problema, ou talvez alguma literatura onde e o tema e abordado com mais maturidade.
Abraços a todos os amigos do GUJ.
Criptografia é o que? Apresentação, negócio ou modelo?
Acho que talvez tenha me expressado mal, no caso seria a persistencia dos dados no banco de dados, estes dentro do banco de dados deveriam estar criptografados, porém para casos isolados em desktop, usando uma base de dados MySql, usei as proprias funções do mesmo, porém usando JDBC.
Mais como este projeto sera voltado para o ambiente Web, e estarei utilizando JPA, e gostaria de manter as regras e algoritmos de criptografia independente do banco de dados, sendo assim ficou a duvida, pois poderia estar implementando está algoritimos de criptografia no model, dentro dos POJOs, dentro dos métodos GET e SET, mais assim o mesmo perderia sua coesão, outra possibilidade seria a implementação na camada de serviço, ou no backing bean, mais nenhuma destas abordagens me parece a maneira mais correta, por isso gostaria de alguma informação, quando a modelos de implementação de persistencia de dados criptografados, ou talvez algum framework possa me ser recomendado.
Obrigado pela atenção, abraços.
Todos os
SGBDs que você conhece ou já ouviu falar que é utilizado, atendem às mesmas condições, em se tratando de criptografia e segurança?
Se sim, implemente na camada de negócios, que é responsável pela estrutura lógica do projeto, não?
Se não, sugiro colocar direto no banco de dados.
Este foi um dos problemas enfrentados, nem todos os SGDBs atendem as necessidades quanto a criptografia, dentre os grandes sim, porém cada qual com uma função propria a ser inserida dentro do proprio SQL seja no momento de persistencia da informação, seja no momento da recuperação, porém alguns SGDBs não possuem nenhuma função nesse sentido como o Firebird por exemplo, porém está abordagem me levaria a uma códificação ao meu ver estranha, pois para cada banco de dados a função iria variar, mais é uma possibilidade real, porem não sei lhe dizer se adequada.
Quanto a camada de negocio, tambem penso que seria o local ideal, já que se trata de uma regra do negocio, e manteria a independencia do SGDB, ao inves do POJO que deve permanecer com sua essencia de certa forma preservada, mais está seria a duvida, se existe algum padrão de projeto adequado, ou framework que apresenta uma solução mais elegante e menos acoplada, ou se essa abordagem sugerida realmente seria a ideal, pois pouco ouvi falar ou tive contato com a criptografia das informações nos bancos de dados de forma mais transparente, pois geralmente vemos exemplos em um escopo muito limitado, tal como campos de senha, e não todainformação a ser persistida no banco de dados, claro menos os IDs e FKs.
Obrigado pela resposta 
É justamente por isto que eu sugiro a camada de negócios.
O problema de cada SGBD implementar algo ou nada, é o que torna a questão mais complexa.
Além do que, não é apenas um tratamento de checksum, com a conversão para um MD5 ou um SHA1 ou SHA2, você, além de encriptar, precisará fazer o inverso, creio eu.
E, assim sendo, já enxergo as execuções sendo realizadas na camada de negócios (no managedBean não ficaria bom, nem no model).
Muito bom, irei seguir essa linha de raciocinio que realmente me parece a mais coesa, que realmente havia batido uma duvida quanto a melhor pratica a ser adotada nesses casos, muito obrigado pela ajuda, paciencia e conselhos.
Abraços a todos.
E para não dizer que não falei de flores… Opa, manifestação errada.
Segue um link com encrypt/decrypt em java
http://www.java-tips.org/java-se-tips/javax.crypto/encryption-and-decryption-using-symmetric.html