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

加密数据的检索

自从我在这里发表上一个帖子以来已经有两个多月了,但是今年六月和七月非常忙碌而密集。 首先, 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

加密数据的检索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序云开发日记类日记记录分享动态

微信公众号&#xff1a;创享日记&#xff08;微信号csds992022&#xff09; 发送关键词&#xff1a;日记类小程序 免费获取源码 1 概述 1.1 关于本手册 为了使您对研岸日记记录社交软件的使用有清晰详尽的了解&#xff0c;特此编写《用户手册》&#xff0c;为了保障您的利益&a…

Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】

第三节 设计输出及利用在线帮助 在Windows中&#xff0c;消息ON_PAINT是专门用来处理输出的。基本所有的输出代码应放在这里。 。其输出方式不再限于从上往下&#xff0c;而是全屏可控&#xff0c;因此每个输出都需要告知系统输出位置。典型的文字输出代码是TextOut函数。 将…

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

文章目录一、时间复杂度二、空间复杂度三、相关题目一、时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n)&#xff0c;它是该算法问题规模n的函数&#xff0c;时间复杂度主要分析T(n)的数量级。算法中基本运算&#xff08;最深…

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e

第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

【问题描述】 对于一棵多叉树&#xff0c;我们可以通过 “左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。换句话说&#xff0c;每个结点可以选任意子结点作为左孩子&#xff0c;并按任…

activiti脚本任务_Activiti中的高级脚本:自定义配置注入

activiti脚本任务脚本任务可能是Activiti代码库中“最古老的”类之一&#xff0c;但是我认为它仍然未被许多人使用。 &#xff08;感知到的&#xff09;缺点当然是性能&#xff08;解释还是编译&#xff09;&#xff0c;并且从IDE角度来看支持较少。 但是&#xff0c;好处&…

【锁相环系列3】QPSK+基带+Costas锁相环载波同步(重点环路滤波器参数设置和迭代核心代码详解)

引言 假设在QPSK信号解调中,完成匹配滤波、定时抽样后的星座如下所示 而画出基带信号部分点的星座图如下所示 由以上两幅图可以看出,基带信号中还存在微小的频偏,导致星座图旋转,而这种微小的频偏很难通过FFT估计出来,由此想到了用锁相环解决,锁相环锁定后的星座如下 …

线性移位寄存器序列(m序列)之MATLAB实现

移位寄存器的结构 nnn级线性移位寄存器的结构如下图 当生成多项式g(x)g(x)g(x)为本原多项式时&#xff0c;产生的序列为m序列。例如 g(x)x5x21g(x)x^5x^21g(x)x5x21的本原多项式&#xff0c;初态为10000的5级m序列&#xff0c;其周期为25−1312^5-13125−131&#xff0c;结构如…

scala和java像不像_关于Java和Scala同步的五件事你不知道

scala和java像不像实际上&#xff0c;所有服务器应用程序都需要在多个线程之间进行某种同步。 大多数同步工作是在框架级别为我们完成的&#xff0c;例如通过我们的Web服务器&#xff0c;数据库客户端或消息传递框架。 Java和Scala提供了许多组件来编写可靠的多线程应用程序。 …

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…

MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)

目录希尔伯特变换原理公式MATLAB官方帮助文档中希尔伯特变换算法常量和结构体定义C语言实现(FFTW库的float版&#xff0c;double版类似)希尔伯特变换原理公式 MATLAB官方帮助文档中希尔伯特变换算法 hilbert uses a four-step algorithm: Calculate the FFT of the input sequ…

netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

netbeans7.4有许多例子说明Java异常处理可能比首次出现时要困难得多&#xff0c;Josh Bloch专门将一整章的《 Effective Java》 &#xff08;两个版本&#xff09;专门用于异常处理。 Java中的检查异常模型 仍然 “ 有争议” 。 我很高兴看到我最近下载的NetBeans 7.4 beta有一…

在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)

原文链接&#xff1a;https://www.paddlepaddle.org.cn/support/news?actiondetail&id2104 “我们的质检要做的是在厚度仅十几微米的电池隔膜上找出所有微小缺陷&#xff0c;如果没有检测出来&#xff0c;就很可能使新能源汽车的电池在使用过程中出现问题&#xff0c;甚至…

准确率超90%、1秒发出报警,人工智能助国网山东实现无人巡检(人工智能应用案例)

原文链接&#xff1a;https://mp.weixin.qq.com/s/Jh2YLY-4um79ucdHIs5NTg 众所周知&#xff0c;深度学习框架是人工智能的基础技术“底座”&#xff0c;在各大传统产业上也有着巨大的潜力尚待挖掘。5月20日&#xff0c;由深度学习技术及应用国家工程实验室与百度联合主办的“…

基于PaddlePaddle实现高尔夫球场的遥感检测(人工智能应用案例)

原文链接&#xff1a;https://www.paddlepaddle.org.cn/support/news?actiondetail&id2103 1 . 背景及意义 随着高尔夫球运动在我国的兴起&#xff0c;关于高尔夫球场大量占用土地资源、污染环境、耗水量大且公益性差的争议越来越多。国家从2004年开始制定一系列相关政策…

MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现

firls函数功能 FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。 b = firls(n,f,a) b = firls(n,f,a,w) b = firls(n,f,a,ftype) b = firls(n,f,a,w,ftype)f是在0和1之间的范围内指定的频率点对的…

数电实验一-初识Multisim和Basys3

特别说明&#xff1a;该系列内容均是本人实验记录&#xff0c;无盗取侵权之嫌&#xff0c;仅供参考&#xff0c;请多动手实践&#xff01; 一、实验目的 详见报告 二、实验仪器设备 详见报告 三、实验设计过程 使用Multisim为Basys3板卡创建一个PLD设计并进行验证。 1.创建P…