當前位置:首頁 » 密碼管理 » hibernate數據加密

hibernate數據加密

發布時間: 2022-09-15 08:38:02

⑴ jasypt mybatis嗎

jasypt既然是以簡單的方式來解決java開發中的加密問題,自然使用起來難度不是很大。加密是從系統安全性方面考慮的,因此jasypt更像是面向方面的解決辦法,不管你的系統中配置文件,敏感信息是否已經加密或者沒有加密,jasypt都能夠輕松的嵌入其中,開發人員就不用專門考慮加密演算法和代碼的編寫。
要想深入了解jasypt是如何將加密解密和摘要演算法組織起來,輕松的解決開發中加密問題以及和第三方組件集成,查看它的源代碼是不錯的選擇。
下面主要說說如何在Spring框架中如何輕松使用jasypt。(下面的加密機是對jasypt中的加密解密,摘要演算法的統稱)
第一種方式:以bean的形式將加密機(即:加密類的實例對象)交給Spring託管
第二種方式:以配置XML的形式將加密機與Spring集成。
第一種方式:
1.託管一個StandardPBEStringEncryptor加密機
<!-- 加密機 -->
<bean id="strongEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="algorithm">
<value>PBEWithMD5AndTripleDES</value>
</property>
<property name="password">
<value>${user.home}</value>
</property>
</bean>

這里的屬性"password"的值為系統屬性的值,實際開發中在對某一個數據進行加密的時候這個password是要進行記錄的,如果password在這里設置之後將默認提供了一個password的取值。
其它的屬性設置可以參見: http://aiilive.blog.51cto.com/1925756/1420837 這篇文章中關於jasypt命令行工具的介紹。
在程序中使用strongEncrypt加密機對象:
@Test
public void test1() {
StandardPBEStringEncryptor spe = (StandardPBEStringEncryptor) context
.getBean("strongEncryptor");
String src = "admin@123";
String encrypt = spe.encrypt(src);
System.out.println("src=\'#\'" //加密解密
Assert.assertEquals(decrypt, src);
}

2.託管一個StandardStringDigester加密機
<!-- 摘要演算法 -->
<bean id="digestEncryptor" class="org.jasypt.digest.StandardStringDigester">
<property name="algorithm">
<value>MD5</value>
</property>
</bean>

在程序中使用digestEncryptor加密機對象
@Test
public void test7() {
StandardStringDigester ssd = (StandardStringDigester) context
.getBean("digestEncryptor");
String rs1 = ssd.digest("admin");
String rs2 = ssd.digest("admin");
System.out.println(rs1 + " [vs] " + rs2);
//判斷是否匹配
Assert.assertTrue(ssd.matches("admin", rs1));
}

StrandardStringDigester類提供了matches方法用來檢測原始數據和進行摘要計算後的數據是否匹配。
1,2介紹了數據的處理,下面3講介紹使用jasypt對配置文件進行處理.
3.使用jasypt對配置文件進行處理
比如資料庫連接的屬性值一般要進行加密處理,然後在程序運行時對其進行解密連接資料庫,這樣就保證了在程序代碼已經配置中資料庫的連接相關敏感數據不至於明文暴露。
jasypt是如何處理這一過程的呢?
首先,配置環境變數(這里指用來加解密的環境),
然後,通過環境變數來裝載加密機,
最後,使用jasypt對Spring的org.springframework.beans.factory.config.PropertyPlaceholderConfigurer類的子類來配置屬性文件替換配置。
下面是具體的配置信息:
<!-- 基於環境變數,配置加密機 -->
<bean id=""
class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<!-- <property name="passwordEnvName" value=""/> -->
<!-- <property name="passwordSysPropertyName" value=""></property> -->
<property name="password" value="sa" />
</bean>

<!-- 配置加密器,將用於解密 -->
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="" />
</bean>

<!-- 外部屬性文件配置 -->
<bean id="propertyConfigurer"
class="org.jasypt.spring31.properties.">
<constructor-arg ref="configurationEncryptor" />
<property name="locations">
<list>
<value>classpath:db.properties</value>
</list>
</property>
</bean>

<!--數據源配置, jasypt的將確保${dataSource.password}是解密 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${dataSource.driver}</value>
</property>
<property name="url">
<value>${dataSource.url}</value>
</property>
<property name="username">
<value>${dataSource.username}</value>
</property>
<property name="password">
<value>${dataSource.password}</value>
</property>
</bean>

說明:
EnvironmentStringPBEConfig 中的屬性
passwordEnvName, passwordSysPropertyName,password
三者的區別是:
passwordEnvName的值直接設置為環境變數,比如value="APP_PASSWORD", APP_PASSWORD則是系統環境變數,在實際生產環境中建議使用這個屬性,具體使用步驟如:配置環境變數APP_PASSWORD --> 啟動應用程序 --> 應用程序啟動完成 --> 刪除環境變數APP_PASSWORD。
passwordSysPropertyName的值就是用 System.getProperties() 獲取的屬性值,比如:value="${user.home}"
password和使用jasypt命令行工具時的password參數用法一致。
屬性配置文件加密
dataSource.driver=org.postgresql.Driver
dataSource.url=jdbc:postgresql://localhost:5432/dbname
dataSource.username=postgres
#dataSource.password=postgres
dataSource.password=ENC()

這里將password的加密結果放置在ENC(機密結果)中,注意這樣的寫法是jasypt的規定,可以查看源代碼,在解密過程中會根據這個標志對屬性配置文件中的加密數據進行解密。
屬性配置文件中的機密結果產生則需要用jasypt的命令行工具(具體使用可以參見:http://aiilive.blog.51cto.com/1925756/1420837 ),這里要注意的是加密過程中的演算法,password參數值需要和Spring配置文件中的(bean)的屬性取值保持一致。
數據源中使用屬性配置信息中的值
以前Spring中怎麼使用,現在就怎麼使用。
jasypt和Spring集成的依賴
jasypt.jar+jasypt-springx-x.jar , x表示一些版本信息。
第二種方式
第一種方式將jasypt中的類作為bean的形式在Spring中應用,第二種方式則更加強大,有獨立的XML配置命名空間,更像是Spring的一部分。
首先需要在Spring的配置文件中添加jasypt的命名空間。

配置完成jasypt的命名空間就可以在Spring的配置文件中直接進行加密機,加密機參數配置,下面是一個示例:
<!-- 基本的密碼加密機 -->
<encryption:basic-password-encryptor id="bpe" scope="singleton" />

<!-- 摘要配置 -->
<encryption:digester-config id="digester-config" algorithm="SHA-256" algorithm-env-name=""/>
<!-- 字元串摘要機 -->
<encryption:string-digester id="sd" algorithm="MD5" config-bean="digester-config"/>

<!-- 加密機配置 -->
<encryption:encryptor-config id="encryptor-config" algorithm="PBEWITHMD5ANDTRIPLEDES"/>
<!-- 字元串加密機 -->
<encryption:string-encryptor id="se" algorithm="PBEWITHMD5ANDDES" config-bean="encryptor-config"/>

<!-- 加密的屬性佔位符 -->
<encryption:encryptable-property-placeholder encryptor="se" location="classpath:db.properties"/>

第二種方式同樣可以實現方式一中的功能。
通過介紹了jasypt和Spring集成的兩種方式可以看出使用jasypt能夠比較輕松自定義加密的參數,配置文件的加解密,整個過程對於應用程序的代碼侵入性是很小的,可以在程序中使用jasypt提供的加密演算法和方法來實現對需要加密的數據進行處理。
此外jasypt與Hibernate集成則以一個完全對程序邏輯透明的方式可以在ORM映射中對數據進行加解密。
最後jasypt也是開放的,它開放了JCE Provider API,允許開發者使用任何存在的JCE Provider在jasypt中進行消息摘要和加密處理。

⑵ java開發人事系統,需要對敏感數據進行加密存儲,為了不影響統計分析和查詢功能,大家有好的實現方案嗎

沒錯,資料庫中存的ID項加密。查詢匹配時使用js或後台將用戶輸入的內容加密後去資料庫匹配。查詢到加密的資料庫數據後在後台解密在發送到前台。如果對於安全要求較高就不要在js中解密。最後,類似於ID的數據加密模式和敏感信息的加密模式要不一致,這樣可以保護你需要保護的敏感信息,即使有人通過js破解了你的ID等數據的加密,也無法獲取真正的敏感信息。

⑶ java 對資料庫properties文件加密

可以通過其它方法來實現:
1:如果沒用框架,直接加密、解密即可
2:如果用hibernate之類,可以繞過Configuration,讀取Hibernate配置文件解密後再連接資料庫
3:考慮集群影響

⑷ struts2和hibernate項目整合的登錄後修改密碼怎麼寫求思路和關鍵代碼

	我是分為新密碼和舊密碼
舊密碼也就是登陸的密碼可以在session中獲取
新密碼是剛輸入的密碼
如果新密碼和舊密碼一致就新建資料庫連接寫個更新密碼的語句
加入了md5加密,新舊密碼對比前要先用md5轉換一下,你可以把這個功能去掉,最下面是md5的工具類

ppublicStringupdatepwd(){
Usersu=(User)ServletActionContext.getRequest().getSession().getAttribute("users");
UserServices=newUserService();
if(su.getPassword().equals(StringUtils.getMd5(user.getOldpwd()))){
if(user.getNewpwd().equals(user.getRepwd())){
if(s.updatepwd(StringUtils.getMd5(user.getNewpwd()),su.getId())){
ActionContext.getContext().put("msg","密碼修改成功,請重新登陸!");
ServletActionContext.getRequest().getSession().invalidate();
return"login";
}else{
ActionContext.getContext().put("msg","密碼修改失敗!");
return"up_error";
}
}else{
ActionContext.getContext().put("msg","確認密碼不一致!");
return"up_error";
}
}else{
ActionContext.getContext().put("msg","原密碼錯誤!");
return"up_error";
}
}
publicbooleanupdatepwd(Stringpwd,Integerid){
returnnewUserDao().updatepwd(pwd,id);
}
publicBooleanupdatepwd(Stringpwd,Integerid){

Sessionsession=HibernateUtils.getSession();
Transactiontr=session.beginTransaction();
Queryquery=session.createQuery("UpdateUsersetpassword=?whereid=?");
query.setString(0,pwd);
query.setInteger(1,id);
inti=query.executeUpdate();
tr.commit();
if(i>0){
returntrue;
}else{
returnfalse;
}
}
ackagecom.yh.utils;

importjava.math.BigInteger;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;

publicclassStringUtils{
/**
*判斷字元串是否為空,包括null和「」
*@paramstr
*@return
*/
publicstaticbooleanisNotBlank(Stringstr){
returnstr!=null&&str.trim().length()>0;
}
/**
*對字元串進行MD5加密
*@paramstr:加密前的一個字元串
*@return:32位加密後的字元串
*/
publicstaticStringgetMd5(Stringstr){
Stringmd5Str="";
try{
MessageDigestmd=MessageDigest.getInstance("md5");
byte[]bytes=md.digest(str.getBytes());
BigIntegermd5String=newBigInteger(1,bytes);
md5Str=md5String.toString(16);//轉換後,一般會是一個32位的字元串
//如果加密後的字元串不到32位,需要在字元串前添加0.補足32位
for(inti=0;i<32-md5Str.length();i++){
md5Str=("0"+md5Str);
}
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
returnmd5Str;
}

publicstaticvoidmain(String[]args){
Stringstr=StringUtils.getMd5("123");
System.out.println(str);
}

}

⑸ 怎麼對MVC4項目中的資料庫連接串進行加密特別是hibernate-configuration節點里的內容

將資料庫連接加密,這種方式不贊同,開發跟測試以及後期維護難免需要訪問生產資料庫進行造數據,以及改數,建議是限制網路,像我們做移動的BOSS系統,都是必須到指定的機房進行版本更新以及數據的維護,而且進入許可權都比較嚴格...

⑹ 加密後的字元串最後有兩個「==」是什麼加密演算法

Base64是網路上最常見的用於傳輸8Bit位元組碼的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。

1,Base64使用US-ASCII子集的64個字元,即大小寫的26個英文字母,0-9,+,/。

2,編碼總是基於3個字元,每個字元用8位二進製表示,因此一共24位,再分為4四組,每組6位,表示一個Base64的值。

3,Base64值為0就是A,為27的就是b。這樣,每3個字元產生4位的Base64字元。如果被加密的字元串每3個一組,還剩1或2個字元,使用特殊字元"="補齊Base64的4字。

(6)hibernate數據加密擴展閱讀:

應用

Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的一個標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。

在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

然而,標準的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標准Base64中的「/」和「+」字元變為形如「%XX」的形式,而這些「%」號在存入資料庫時還需要再進行轉換。

因為ANSI SQL中已將「%」號用作通配符。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不僅在末尾去掉填充的'='號,並將標准Base64中的「+」和「/」分別改成了「-」和「_」。

這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了資料庫、表單等處對象標識符的格式。

另有一種用於正則表達式的改進Base64變種,它將「+」和「/」改成了「!」和「-」,因為「+」,「/」以及前面在IRCu中用到的「[」和「]」在正則表達式中都可能具有特殊含義。

此外還有一些變種,它們將「+/」改為「_-」或「._」(用作編程語言中的標識符名稱)或「.-」(用於XML中的Nmtoken)甚至「_:」(用於XML中的Name)。

⑺ 處於安全考慮 hibernate的hbm.xml能不能進行 加密,解密

這個還真不可以.你可以把裡面的字元都換掉.

我當初用那個代碼混淆器也不可以.
因為代碼混淆如果把代碼的簽名一起改了的話,其他地方是肯定調用不到,並會出錯

加我好友吧我也學編程開發的

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372