日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

加密数据的检索_透明地持久保存并从数据库中检索加密的数据

發布時間:2023/12/3 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加密数据的检索_透明地持久保存并从数据库中检索加密的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

加密數據的檢索

自從我在這里發表上一個帖子以來已經有兩個多月了,但是今年六月和七月非常忙碌而密集。 首先, Confitura的組織(歐洲最大的Java開發人員免費會議)參加了我所有的免費晚會,然后在相當緊張的住院期間,我們的第二個兒子出生了。 但是現在,我將嘗試再次定期寫博客,所以請繼續關注。

在這篇文章中,我將簡要介紹如何使用Jasypt庫以一種簡單,透明的方式將加密的數據存儲在數據庫中并檢索已解密的數據。 我們的用例將是存儲Twitter Api憑據,以便它們在我們的數據庫中是安全的,但仍易于檢索并用于在我們的時間軸中發布更新。

因此,我們擁有的是一個簡單的實體,代表我們的設置項目:

@Entity public class SettingsItem implements Serializable {@Id@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)private Integer id;private String name;private String encryptedValue; }

在此表中,我們將存儲Twitter消費者密鑰,Twitter訪問令牌等的值。

我們想要實現的是,當我們創建具有值作為純文本的SettingItem對象,然后對其進行持久化時,將自動執行加密,因此在數據庫中我們已對String進行了加密。 當然,當我們從數據庫中檢索數據時,我們希望開箱即用地看到解密的String,而無需付出額外的努力。

Jasypt進行救援

Jasypt是一個用Java編寫的簡單加密庫。 它使開發人員免于處理低級配置細節,并使整個加密過程變得簡單而直接。 而且現在最有趣的是,它還與Hibernate很好地集成在一起,可以對存儲在數據庫中的數據進行無縫加密/解密。

建立

要使用Jasypt及其Hibernate集成模塊,我們必須在pom中添加兩個項目:

<dependency><groupId>org.jasypt</groupId><artifactId>jasypt</artifactId><version>1.9.0</version></dependency><dependency><groupId>org.jasypt</groupId><artifactId>jasypt-hibernate4</artifactId><version>1.9.0</version></dependency>

自訂類型

然后,我們必須在我們的實體中聲明自定義的Hibernate類型(@TypeDef):

@TypeDef(name="encryptedString",typeClass=EncryptedStringType.class,parameters= {// value will be used later to register encryptor@Parameter(name="encryptorRegisteredName", value="STRING_ENCRYPTOR")} ) @Entity public class SettingsItem implements Serializable {// (...) }

然后在同一個類中,我們可以標記我們的ActivatedValue字段以使用此自定義類型:

@Type(type="encryptedString")private String encryptedValue;

注冊加密器

我們快完成了。 我們要做的最后一件事是在HibernatePBEEncryptorRegistry類中注冊加密器。 這可以在我們的應用程序的初始化類(例如ServletContext)中完成,也可以在具有main(String [] args)方法的類中完成:

String password = System.getProperty("jasypt.password");StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();strongEncryptor.setPassword(password);HibernatePBEEncryptorRegistry registry =HibernatePBEEncryptorRegistry.getInstance();registry.registerPBEStringEncryptor("STRING_ENCRYPTOR", strongEncryptor);

這里重要的一點是,通過使用System.getProperty()或System.getenv(),我們可以安全地配置我們的加密機制,在服務器上通過設置適當的值在運行時提供密碼。

摘要

作為總結,一個簡短的通過測試表明我們的解決方案有效:

public class SettingsItemRepositoryShould extends IntegrationTest {@Autowiredprivate SettingsItemRepository repository;@BeforeClasspublic static void init() {StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();strongEncryptor.setPassword("JohnDoe");HibernatePBEEncryptorRegistry registry =HibernatePBEEncryptorRegistry.getInstance();registry.registerPBEStringEncryptor("STRING_ENCRYPTOR", strongEncryptor);}@Testpublic void shouldEncryptAndDecryptValue() {// GivenString settingName = "test";String value = "EncryptMe";// Whenrepository.save(new SettingsItem(settingName, value));// ThenSettingsItem settingsItem = repository.findByName(settingName);assertThat(settingsItem.getEncryptedValue()).isEqualTo(value);} }

參考:通過Code Hard Go Pro博客從我們的JCG合作伙伴 Tomasz Dziurko 透明地持久存儲數據庫中的數據并檢索加密數據 。

翻譯自: https://www.javacodegeeks.com/2013/08/transparently-persist-and-retrieve-encrypted-data-from-database.html

加密數據的檢索

總結

以上是生活随笔為你收集整理的加密数据的检索_透明地持久保存并从数据库中检索加密的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。