给hibernate配置文件加密 解密的方案(Spring)11111111

问题描述

转自:http://www.javaeye.com/topic/70663如何给工程中的配置文件加密解密之前有人问过hibernate密码问题,大家都没有给出一个具体的解决方案,所以我就看了一下代码,把我的想法和实现拿出来和大家讨论一下。我现在的环境是spring+hibernate,但是这并不影响这个加密解密的问题,其他环境应该是略有不同,但是思路肯定是一样的。总体思路:在工程的配置文件中填写数据库密码的密文,在应用程序使用datasource的时候解密成明文以创建连接。步骤1使用java的中cipher类并使用DES(对称加密算法)算法对明文进行加密````````````````这里如何使用cipher类和DES算法的原理可以上网查找,我懒得写了,如果大家真的也怕麻烦自己去找的话我再写一个贴出来吧修改:我随便写了一个类,大家看着改吧,我没有测试过Java代码publicclassDESUtil{publicstaticvoidmain(String[]args){try{if(args[0].equals("-genKey")){generateKey(args[1]);}else{//if(args[0].equals("-encrypt"))encrypt();//elsedecrypt();}}catch(Exceptione){//TODO:handleexception}}publicstaticStringencrypt(StringplainText,StringencryptString,FilekeyFile)throwsIOException,ClassNotFoundException,GeneralSecurityException{ObjectInputStreamkeyIn=newObjectInputStream(newFileInputStream(keyFile));intmode=Cipher.ENCRYPT_MODE;Keykey=(Key)keyIn.readObject();keyIn.close();InputStreamin=newFileInputStream(plainText);OutputStreamout=newFileOutputStream(encryptString);Ciphercipher=Cipher.getInstance("DES");cipher.init(mode,key);doEncryptAndDecrypt(in,out,cipher);Stringresult=out.toString();System.out.print(result);in.close();out.close();returnresult;}publicstaticStringdecrypt(StringencryptString,StringplainText,FilekeyFile)throwsIOException,ClassNotFoundException,GeneralSecurityException{ObjectInputStreamkeyIn=newObjectInputStream(newFileInputStream(keyFile));intmode=Cipher.DECRYPT_MODE;Keykey=(Key)keyIn.readObject();keyIn.close();InputStreamin=newFileInputStream(encryptString);OutputStreamout=newFileOutputStream(plainText);Ciphercipher=Cipher.getInstance("DES");cipher.init(mode,key);doEncryptAndDecrypt(in,out,cipher);Stringresult=out.toString();System.out.print(result);in.close();out.close();returnresult;}publicstaticvoiddoEncryptAndDecrypt(InputStreamin,OutputStreamout,Ciphercipher)throwsIOException,GeneralSecurityException{intblockSize=cipher.getBlockSize();intoutputSize=cipher.getOutputSize(blockSize);byte[]inBytes=newbyte[blockSize];byte[]outBytes=newbyte[outputSize];intinLength=0;booleanmore=true;while(more){inLength=in.read(inBytes);if(inLength==blockSize){intoutLength=cipher.update(inBytes,0,blockSize,outBytes);out.write(outBytes,0,outLength);}elsemore=false;}if(inLength>0)outBytes=cipher.doFinal(inBytes,0,inLength);elseoutBytes=cipher.doFinal();out.write(outBytes);}publicstaticvoidgenerateKey(Stringpath)throwsException{KeyGeneratorkeygen=KeyGenerator.getInstance("DES");SecureRandomrandom=newSecureRandom();keygen.init(random);SecretKeykey=keygen.generateKey();ObjectOutputStreamout=newObjectOutputStream(newFileOutputStream(path));out.writeObject(key);out.close();}}publicclassDESUtil{publicstaticvoidmain(String[]args){try{if(args[0].equals("-genKey")){generateKey(args[1]);}else{//if(args[0].equals("-encrypt"))encrypt();//elsedecrypt();}}catch(Exceptione){//TODO:handleexception}}publicstaticStringencrypt(StringplainText,StringencryptString,FilekeyFile)throwsIOException,ClassNotFoundException,GeneralSecurityException{ObjectInputStreamkeyIn=newObjectInputStream(newFileInputStream(keyFile));intmode=Cipher.ENCRYPT_MODE;Keykey=(Key)keyIn.readObject();keyIn.close();InputStreamin=newFileInputStream(plainText);OutputStreamout=newFileOutputStream(encryptString);Ciphercipher=Cipher.getInstance("DES");cipher.init(mode,key);doEncryptAndDecrypt(in,out,cipher);Stringresult=out.toString();System.out.print(result);in.close();out.close();returnresult;}publicstaticStringdecrypt(StringencryptString,StringplainText,FilekeyFile)throwsIOException,ClassNotFoundException,GeneralSecurityException{ObjectInputStreamkeyIn=newObjectInputStream(newFileInputStream(keyFile));intmode=Cipher.DECRYPT_MODE;Keykey=(Key)keyIn.readObject();keyIn.close();InputStreamin=newFileInputStream(encryptString);OutputStreamout=newFileOutputStream(plainText);Ciphercipher=Cipher.getInstance("DES");cipher.init(mode,key);doEncryptAndDecrypt(in,out,cipher);Stringresult=out.toString();System.out.print(result);in.close();out.close();returnresult;}publicstaticvoiddoEncryptAndDecrypt(InputStreamin,OutputStreamout,Ciphercipher)throwsIOException,GeneralSecurityException{intblockSize=cipher.getBlockSize();intoutputSize=cipher.getOutputSize(blockSize);byte[]inBytes=newbyte[blockSize];byte[]outBytes=newbyte[outputSize];intinLength=0;booleanmore=true;while(more){inLength=in.read(inBytes);if(inLength==blockSize){intoutLength=cipher.update(inBytes,0,blockSize,outBytes);out.write(outBytes,0,outLength);}elsemore=false;}if(inLength>0)outBytes=cipher.doFinal(inBytes,0,inLength);elseoutBytes=cipher.doFinal();out.write(outBytes);}publicstaticvoidgenerateKey(Stringpath)throwsException{KeyGeneratorkeygen=KeyGenerator.getInstance("DES");SecureRandomrandom=newSecureRandom();keygen.init(random);SecretKeykey=keygen.generateKey();ObjectOutputStreamout=newObjectOutputStream(newFileOutputStream(path));out.writeObject(key);out.close();}}通过以上的encrypt方法得到一个密码的密文(一般的密码是明文,作为参数传进去可以得到对应的密文),比如说21sadf25

时间: 2024-10-31 00:12:54

给hibernate配置文件加密 解密的方案(Spring)11111111的相关文章

hibernate配置文件中数据库密码加密

问题描述 hibernate配置文件中数据库密码加密 求大神支招啊... 这是的hibernate.xml <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-co

在JavaWeb项目中URL中字符串加密解密方案

URL由来: 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 "http://www.abc.com",但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com).这是 因为网络标准RFC 1738 做了硬性规定: "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+

Java web项目中,如何对连接数据库的的配置项进行加密 解密

问题描述 Javaweb项目中,如何对连接数据库的的配置项进行加密解密,大神解救,希望能详细的说明解决方法,感激不尽! 解决方案 解决方案二:用MD5随便加个密不就可以了!解决方案三:如果要解密的话,你用BASE64弄吧.加密的时候弄一个盐值.解决方案四:通过配置动态加载数据源,数据源的配置是加密的,在加载的时候进行解密加载这样做的目的何在..解决方案五:md5,sha1,同楼上,这样做意义何在///<summary>///用Md5进行加密///</summary>///<p

laravel 5.3中自定义加密服务的方案详解

前言 本文介绍的是laravel 5.3中自定义加密服务的方案,利用laravel的服务容器,实现自定义加密服务注册(示例是支持长字符串的RSA加密),下面来看看详细的介绍: 创建加密解密服务类 文件地址 /app/Service/Common/CryptService.php 代码如下 下面这个是个人写的支持长字符串的RSA加密类作为示例,自定义加密的话只需更改这个文件的代码就好,其它操作只是为了实现依赖注入. <?php namespace App\Service\Common; class

C#一个封装的加密解密类

封装|加密|解密 using System;using System.Text;using System.Globalization;using System.Security.Cryptography; using System.Windows.Forms; namespace Jh.Encrypts{ public class JhEncrypt { /// <summary> /// 构造方法 /// </summary> public JhEncrypt() { } ///

NBearV3教程——实体配置文件加密篇

版本 1.0 [2006-11-18] 简介 本教程介绍NBearV3中的实体配置文件的加密支持. 目标 通过本教程,读者应能够全面掌握加密实体配置文件和如何结合使用ASP.NET的配置节加密功能,实现部署环境关联的实体配置加密. 代码 本教程不包含任何演示代码. 时间 <10分钟. 正文 1 配置及启用实体配置文件加密 要启用实体配置文件加密,需要如下设置entityConfig配置节: <?xml version="1.0" encoding="utf-8&q

【推荐】JAVA基础◆浅谈3DES加密解密

浅谈3DES加密解密   (注:本文不深入探讨3DES的加密原理,只着重说明在Java中使用3DES加密解密以及常见问题)       从数据安全谈起       当你使用网银时,是否担心你的银行卡会被盗用?     当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露?     作为开发者,编写安全的代码比编写优雅的代码更重要,因为安全是一切应用之根本!为了确保数据不被侵犯,数据加密/解密技术运用而生.    --摘录自<Java加密解密的艺术>       所以为了确保数据传输和数据存储的

java实现Base64加密解密算法_java

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.

Golang加密解密之RSA(附带php)_Golang

RSA加密算法简史 RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA加密算法原理 学过算法的朋友都知道,计算机中的算法其实就是数学运算.所以,再讲解RSA加密算法之前,有必要了解一下一些必备的数学知识.我们就从数学知识开始讲解. 必备数学知识 RSA加密算法中,只用到素数.互质数.指数运算.模运算等