Fórum Criptografar a senha do persistence.xml #386364
14/09/2010
0
Já pesquisei bastante na web, mas ainda não encontrei nada, o mais proximo que consegui foi ouvir falar sobre uma API chamada jasypt, que serve para criptografar senhas, e até onde consegui entender é possivel utilizando ela colocar a senha do BD criptografada no arquivo persistence.xml. Porém não consigo fazer isso de maneira alguma !!!
Alguém sabe utilizar esta API, ou então sabe de outra forma de resolver isto?
Desde já obrigado !!!
Rafael Costa
Curtir tópico
+ 0Posts
15/09/2010
Davi Costa
existe algumas formas de fazer a conexão
que não use o persistence.xml.
Se tiver usando o hibernate pode fazer uma classe assim:
//imports omitidos
public class HibernateUtil {
private static final long serialVersionUID = 1L;
private static HibernateUtil me;
private SessionFactory sessionFactory;
/**
* Construtor padrão
*
* @author Costa
* @version 1.0,
*/
private HibernateUtil(){
sessionFactory = new AnnotationConfiguration()
.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect")
.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver")
.setProperty("hibernate.connection.url", "jdbc:postgresql://192.168.0.150:5432/DBSCS")
.setProperty("hibernate.connection.username", "postgres")
.setProperty("hibernate.connection.password", "postgres")
.setProperty("hibernate.hbm2ddl.auto", "none")
.setProperty("hibernate.show_sql", "true")
.setProperty("hibernate.format_sql", "true")
.setProperty("hibernate.c3p0.acquire_increment", "1")
.setProperty("hibernate.c3p0.idle_test_period", "100")
.setProperty("hibernate.c3p0.max_size", "10")
.setProperty("hibernate.c3p0.max_statements", "0")
.setProperty("hibernate.c3p0.min_size", "5")
.setProperty("hibernate.c3p0.timeout", "100")
//.addAnnotatedClass(Clientes.class) aqui vc declara todas suas classes da camada modelo
.buildSessionFactory();
}
public Session getSession() {
Session toReturn = sessionFactory.openSession();
toReturn.beginTransaction();
return toReturn;
}
public static HibernateUtil getInstance() {
if (me== null){
me = new HibernateUtil();
}
return me;
}
}
Percebeu que eu passei password direto "postgres".
Ai vc pode ver alguma biblioteca Java que receba esse valor criptografado te retorne a String com um valor
real ("postgres").
Acredito que até o jasypt que vc já pesquisou resolva.
Espero ter ajudado
Att Davi
Gostei + 0
16/09/2010
Rafael Costa
pois utilizando JPA tem como eu passar a senha pela aplicação também, fazendo assim:
Properties prop = new Properties();
prop.setProperty("hibernate.connection.password", "mypassword");
final EntityManagerFactory factory = Persistence.createEntityManagerFactory("unit",prop);
Desta maneira eu não preciso colocar a senha no arquivo persistence.xml, mas mesmo assim qualquer um com um programinha simples de converter .class em .java (JAD por exemplo) poderá ver meu codigo java e assim ele verá minha senha do BD da mesma forma.
Mas estive pensando, acho que então não tem como, porque de qualquer forma eu tenho que colocar a senha descriptografada em algum lugar, e não tem como eu impedir de alguém ver essa senha. :( Ou será que estou enganado ?
Mas de qualquer forma, valeu pela ajuda ! :D
Gostei + 0
17/09/2010
Davi Costa
vejo uma pequena luz no fim do túnel,
seguindo essa estratégia q eu te passei.
No lugar de usar bibliotecas de terceiros,
já pensou em vc criar sua própria classe de utilitários para criptografar senhas.
Nessa classe cria um método estático que receba como parâmetro
uma String para vc não ter que instanciar essa classe
e diminuir o acoplamento.
Cria um código que só vc entenderia.
Posso até dar umas sugestões:
Vai fazendo tratamento de todos os caracteres que vc não quer receber,
por exemplo: ç~´.. entre outros.
Deixa sua lógica esperando todas as letras e números e que dependendo do
que receber como parâmetro ele sempre valores diferentes, por exemplo
e1 tem que retornar algo diferente de 1e .. e por aí vai.
Seria até interessante vc nessa classe utilitário (já que vc está bem preocupado com a segurança do banco)
em outro projeto vc mantém essa classe e deixa esse método bidirecional, para qdo vc for implantar seu projeto
em outros bancos vc saber que se "testeSenha" retorna "335dvdufbbf" então é só colocar
ClasseUtil.retornaSenha("335dvdufbbf") e vc vai ter certeza que vai retorna "testeSenha".
E pode manter esse método bidirecional somente no seu projeto a parte para ninguém executar ele
com "335dvdufbbf" e saber que vai retornar "testeSenha".
Espero ter ajudado.
att Davi
Gostei + 0
18/09/2010
Rafael Costa
Valeu, muito obrigado !!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)