Olá pessoal, ultimamente tenho estudado um pouco de como utilizar JPA+hibernate, e para brincar um pouco fiz um programinha simples de cadastro de clientes. Quando terminei notei que o arquivo .jar que é gerado contém dentro da pasta META-INF o arquivo persistence.xml no qual esta contida a senha do meu banco de dados. Ou seja, caso eu fosse distribuir meu programinha, qualquer um poderia pegar o jar e ver minha senha :shock: !
Então minha dúvida é: como que eu faço para que não fique exposta minha senha do banco? tem como criptografar este arquivo?
Não posso, se eu apagar esta informação não irá funcionar o meu sistema, pois ele busca neste arquivo o endereço do banco de dados assim como o usuario e a senha para acesso.
Mas mesmo assim obrigado…
H
Hebert_Coelho
Cara, até onde eu sei sobre meta-inf ela é gerada automaticamente e o manifest era para dependência de jar. Foi vc qm colocou a senha ali?
Realmente essa senha terá que ficar em algum lugar. Uma solução seria criar um arquivo onde vc armazenaria sua senha e quando vc enviasse seu programa para alguém, esse arquivo fosse em branco e a pessoa colocasse a senha/usuário do DB dela. Com isso, sua senha não seria exposta.
R
rafaelevoinfo
Realmente o meta-inf é gerado automaticamente, mas minha senha fica dentro do arquivo persistence.xml que é o arquivo de configuração do hibernate e não no arquivo mainfest.
Isso não resolve pro meu caso, é porque aqui onde eu faço meu estágio tem vários pcs, e eu quero colocar o meu programa em todos eles, e colocar o meu BD no servidor, so que ai que vem o problema, em todos os pcs terá o meu jar, e dentro dele tem o arquivo persistence.xml que terá o endereço do BD, usuario e senha, ai caso alguem queira ele pode muito bem ver meu usuario e senha, e então acessar o meu BD e então só Deus sabe o que ele pode querer fazer… :shock:
L
Leozin
Você pode colocar só a senha criptgrafada, já é o suficiente. Podes criar um SHA, MD5 ou whatever.
Qual a implementação de JPA você está utilizando?
R
rafaelevoinfo
Estou utilizando o hibernate.
E quanto a eu criptografar a senha… como faço isso?
eu até tenho um método aqui que criptografa uma senha, mas ai eu coloco a senha criptografada no arquivo persistence.xml? mas e quando o hibernate for ler o arquivo e ver essa senha criptografada? ele vai descriptografar e mandar para o banco para realizar o acesso?
A
Alexandre_Saudate
Normalmente, pra contornar esse problema, usamos um datasource (que é gerenciado pelo contêiner, ou seja, o desenvolvedor não tem acesso) e fazemos o lookup dele por JNDI. Fica assim:
persistence.xml
<persistence-unitname="PU"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/PUDatasource</jta-data-source><!-- outras informações... --><properties><propertyname="hibernate.dialect"value="ODialeto"/><propertyname="hibernate.hbm2ddl.auto"value="update"/><propertyname="hibernate.show_sql"value="false"/><propertyname="hibernate.format_sql"value="true"/><!-- etc... --></properties></persistence-unit>
De maneira que as informações de conexão com o banco fiquem no datasource, OK ?
[]´s
R
rafaelevoinfo
hum… só tem um problema… não faço idéia de como fazer isso. rsrsrs
mas valeu pela dica, vou pesquisar sobre esse datasource, qualquer coisa volto aqui.
R
rafaelevoinfo
Olá asaudate, dei uma pesquisada na web e achei algumas coisas falando sobre JNDI, porém todas são voltadas para aplicações web, e minha aplicação é para desktop. Como que irei trabalhar com um contêiner(Tomcat) utilizando java para Desktop ?
Olá Garcia, será que tem como vc me mostrar um exemplo? não to conseguindo entender como que irei utilizar este jasypt.
Não estou sabendo como configurar meu arquivo persistence.xml.
Obrigado.
D
danillorc
Eu sei q esse post já tem 2 anos, mas pra quem quiser cryptograr uma string fica a dica
publicclassBase64Coder{publicstaticStringencodeString(Strings){returnnewString(encode(s.getBytes()));}publicstaticchar[]encode(bytein[]){returnencode(in,in.length);}privatestaticchar[]encode(bytein[],intiLen){intoDataLen=(iLen*4+2)/3;intoLen=((iLen+2)/3)*4;charout[]=newchar[oLen];intip=0;for(intop=0;ip<iLen;op++){inti0=in[ip++]&0xff;inti1=ip>=iLen?0:in[ip++]&0xff;inti2=ip>=iLen?0:in[ip++]&0xff;into0=i0>>>2;into1=(i0&3)<<4|i1>>>4;into2=(i1&0xf)<<2|i2>>>6;into3=i2&0x3f;out[op++]=map1[o0];out[op++]=map1[o1];out[op]=op>=oDataLen?'=':map1[o2];op++;out[op]=op>=oDataLen?'=':map1[o3];}returnout;}publicstaticStringdecodeString(Strings){returnnewString(decode(s));}publicstaticbyte[]decode(Strings){returndecode(s.toCharArray());}privatestaticbyte[]decode(charin[]){intiLen=in.length;if(iLen%4!=0)returnnewbyte[0];for(;iLen>0&&in[iLen-1]=='=';iLen--);intoLen=(iLen*3)/4;byteout[]=newbyte[oLen];intip=0;intop=0;do{if(ip>=iLen)break;inti0=in[ip++];inti1=in[ip++];inti2=ip>=iLen?65:((int)(in[ip++]));inti3=ip>=iLen?65:((int)(in[ip++]));if(i0>127||i1>127||i2>127||i3>127)returnnewbyte[0];intb0=map2[i0];intb1=map2[i1];intb2=map2[i2];intb3=map2[i3];if(b0<0||b1<0||b2<0||b3<0)thrownewIllegalArgumentException("Illegal character in Base64 encoded data.");into0=b0<<2|b1>>>4;into1=(b1&0xf)<<4|b2>>>2;into2=(b2&3)<<6|b3;out[op++]=(byte)o0;if(op<oLen)out[op++]=(byte)o1;if(op<oLen)out[op++]=(byte)o2;}while(true);returnout;}publicBase64Coder(){}privatestaticcharmap1[];privatestaticbytemap2[];static{map1=newchar[64];inti=0;for(charc='A';c<='Z';c++)map1[i++]=c;for(charc='a';c<='z';c++)map1[i++]=c;for(charc='0';c<='9';c++)map1[i++]=c;map1[i++]='+';map1[i++]='/';map2=newbyte[128];for(i=0;i<map2.length;i++)map2[i]=-1;for(i=0;i<64;i++)map2[map1[i]]=(byte)i;}}