使用Druid生成加密密码,实现mysql数据库连接用户密码加密解密

SSM项目数据库密码加密实践:基于Druid连接池的RSA方案 在Java企业级应用开发中,数据库连接池是管理数据库连接、提升性能的核心组件。其配置信息,尤其是数据库密码的安全性,直接关系到整个应用的数据安全。非对称加密技术,如RSA,通过公钥加密、私钥解密的机制,为敏感信息的存储提供了高安全性的解决方案。该技术价值在于实现了配置文件中密码的密文存储,有效防止因代码泄露或配置暴露导致的数据库安全风险。在典型的SSM(Spring + Spring MVC + MyBatis)架构项目中,整合Druid连接池并利用其内置的ConfigFilter,可以无缝实现数据库密码的 阅读详情

参考 :Druid官网https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ConfigFilter的作用包括:

    从配置文件中读取配置
    从远程http文件中读取配置
    为数据库密码提供加密功能

1 配置ConfigFilter
1.1 配置文件从本地文件系统中读取

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">
      <property name="filters" value="config" />
      <property name="connectionProperties" value="config.file=file:///home/admin/druid-pool.properties" />
  </bean>

1.2 配置文件从远程http服务器中读取

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">
      <property name="filters" value="config" />
      <property name="connectionProperties" value="config.file=http://127.0.0.1/druid-pool.properties" />
  </bean>

这种配置方式,使得一个应用集群中,多个实例可以从同一个地方读取配置,集中配置,集中修改,部署更简单。
1.3 通过jvm启动参数来使用ConfigFilter

DruidDataSource支持jvm启动参数配置filters,所以你可以:

java -Ddruid.filters=config ....

2 数据库密码加密

数据库密码直接写在配置中,对运维安全来说,是一个很大的挑战。Druid为此提供一种数据库密码加密的手段ConfigFilter。
2.1 执行命令加密数据库密码

在命令行中执行如下命令:

java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password

输出

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

输入你的数据库密码,输出的是加密后的结果。
2.2 配置数据源,提示Druid数据源需要对数据库密码进行解密。

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">
      <property name="url" value="jdbc:derby:memory:spring-test;create=true" />
      <property name="username" value="sa" />
      <property name="password" value="${password}" />
      <property name="filters" value="config" />
      <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" />
  </bean>

2.3 配置参数,让ConfigFilter解密密码

有三种方式配置:
1) 可以在配置文件my.properties中指定config.decrypt=true
2) 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true

3) 也可以在jvm启动参数中指定-Ddruid.config.decrypt=true

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

jar包版本:druid-1.0.13.jar

1. 加密,用以下命令将用户名和密码加密

cmd命令行执行 java -cp D:/druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools 用户名/密码

得到密文:

f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==

2.用户名解密:

ackage com.heli.core.user.common;
import com.alibaba.druid.filter.config.ConfigTools;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 用来解密配置中的密文(重点配置,在这里扩展用户名的解密)
* setUsername(name) 方法对应xml中的一个property属性,password默认加密不需要重写,
* 还可以加密url 重写setUrl(url) 
*/
@SuppressWarnings("all")
public class DecryptDruidSource extends DruidDataSource{
@Override
public void setUsername(String username) {
try {
username = ConfigTools.decrypt(username);
} catch (Exception e) {
e.printStackTrace();
}
super.setUsername(username);
}
}
3.spring-database.xml中数据库连接的配置
<bean id="dataSource" class="com.heli.core.user.common.DecryptDruidSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
        <!-- config.decrypt=true -->
   <property name="filters" value="config" />
       <property name="connectionProperties" value="config.decrypt=true" />
      
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="${maxActive}" />
<!-- 连接池最大空闲 这个参数已经被弃用 <property name="maxIdle" value="${maxIdle}"></property> -->
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
         <property name="validationQuery" value="${validationQuery}" />
        <property name="testWhileIdle" value="${testWhileIdle}" />
        <property name="testOnBorrow" value="${testOnBorrow}" />
        <property name="testOnReturn" value="${testOnReturn}" />
 
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
 
        <!-- 关闭长时间不使用的连接 -->
        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="${removeAbandoned}" />
        <!-- 1200秒,也就是20分钟 -->
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${logAbandoned}" />
</bean>
4.数据库配置文件:
3.user.properties中
#mysql
username=f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==
password=f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==
url=jdbc:mysql://192.168.1.194/user?characterEncoding=utf-8
driver=com.mysql.jdbc.Driver
initialSize=5
minIdle=5
maxActive=20
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=30000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=true
testOnReturn=true
filters=stat,log4j
removeAbandoned=true
removeAbandonedTimeout=1200
logAbandoned=true


Spring Boot数据库密码加密实战:Jasypt与Druid方案详解 在Java企业级应用开发中,配置安全管理是保障系统安全的重要环节。其核心原理在于对敏感信息进行加密处理,防止明文泄露。通过加密技术,可以实现配置与代码的分离,提升系统的安全水位。这一实践在数据库连接配置等场景中尤为重要。Jasypt作为一个成熟的Java加密库,提供了便捷的配置属性加密能力,而Druid作为高性能连接池,其密码回调机制则为运行时解密提供了灵活性。本文将结合这两种技术,深入探讨在Spring Boot项目中实现数据库密码加密的两种主流方案:基于Jasypt的配置加载时解密,以及利用Druid 阅读详情

相关推荐

Spring Boot多数据源下Druid数据库密码加密配置实战

在Java企业级应用开发中,数据库连接池是提升性能和稳定性的关键技术组件,而数据源配置的安全性则是保障系统安全的第一道防线。其核心原理在于通过加密算法对敏感信息进行转换,防止明文泄露。这项技术的价值在于满足安全合规要求,实现配置信息的纵深防御,尤其在生产环境和微服务架构中至关重要。应用场景广泛覆盖主从分离、分库分表及多租户系统等需要配置多个数据库连接的复杂工程实践。本文聚焦于解决Druid连接池在Spring Boot多数据源环境下的密码安全存储问题,详细阐述了如何通过自定义环境处理器实现配置的自动解密,并

486

druid数据库密码加密

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_44784871的博客 2万+

Spring Boot项目Druid数据库密码AES加密实战与安全配置

在Java应用开发中,数据库连接池是核心组件,而密码安全是系统防护的关键环节。对称加密算法如AES(Advanced Encryption Standard)通过使用相同密钥进行加密和解密,确保了数据在传输和存储过程中的机密性。其技术价值在于为敏感配置信息提供了可逆的加密保护,避免了明文密码在配置文件中的暴露风险。这一机制广泛应用于需要对敏感数据进行安全存储并在运行时动态解密的场景,例如Spring Boot项目中的数据库连接配置。通过实现自定义的EnvironmentPostProcessor,可以在应用

defkaug153461的博客 604

druid加密

Druid使用RSA非对称加密算法进行密码加密。RSA算法通过生成一对公钥和私钥来实现加密和解密操作。公钥用于加密数据,而私钥则用于解密数据。在Druid中,原始密码使用私钥进行加密,生成密文,密文可以保存在配置文件或数据库中。当需要验证密码时,可以使用公钥对密文进行解密,还原成原始密码进行比较。

2301_77580044的博客 7901

Druid多数据源密码加密配置实战:从原理到Spring Boot应用

数据库连接池是Java应用中的核心组件,负责管理与数据库的连接,其配置安全性直接影响整个系统的数据安全。在微服务架构下,一个服务同时连接多个不同类型数据库(如MySQL、PostgreSQL)的场景日益普遍,这使得密码等敏感信息的保护变得尤为重要。密码加密的基本原理是通过加密算法将明文转换为密文,在应用启动时动态解密,从而避免敏感信息在配置文件中以明文形式暴露。Druid作为Java生态中广泛使用的高性能连接池,提供了两种主流的密码加密方案:内置的ConfigFilter基于RSA非对称加密,适合快速集成;

weixin_34062469的博客 508

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

druid 获取加密数据库密码

官网方法 java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password 由此可见,获取数据库密码加密的方式是通过开启一个ConfigTools的线程com.alibaba,druid.filter.config.ConfigTools执行main方法来获取数据库加密的,代码如下图 ...

sweetCandy_m的博客 1485

【论文笔记】Beyond Low-frequency Information in Graph Convolutional Networks

文章目录1. Abstract2. Introduction低频和高频信号作用FAGCN怎么设计3. An Experimental Investigation4. Model4.1 filter定义4.2 Aggregation4.3 Problems of signal combination4.4 Spatial vision of FAGCN4.5 系数αijG\alpha_{i j}^{G}αijG​4.6 模型整体框架FAGCN的表达能力实验 本文发表在AAAI-21上 论文地址:https:

Running Snail 5602

druid获取加密后的密码串

1.找到程序使用的druid jar包的位置 2.按住shift,鼠标右键点击空白处,按W,再按enter键,打开命令行. 3.将如下命令编辑好粘贴上去,按enter键运行 java -cp druid-1.0.11.jar com.alibaba.druid.filter.config.ConfigTools 123456 其中1.0.11是druid jar包的版本号,12...

locat_csdn的博客 1020

WPF数据可视化:LiveCharts自定义X轴与Y轴的5个实战技巧(附完整代码)

本文详细介绍了在WPF应用中使用LiveCharts进行数据可视化时,自定义X轴与Y轴的5个核心实战技巧。内容涵盖精确控制刻度步距、深度定制视觉样式、实现多轴布局对比、优化显示空间以及构建响应式动态轴,并提供了完整的C#和XAML代码示例,帮助开发者创建专业且用户体验出色的图表。

moss5的博客 691

adams案例分析_案例1(麦弗逊悬架子系统创建)

本文字数3292字83图,建议阅读时间26分钟首先看下案例1的麦弗逊悬架数模结构就不细讲了,从数模上主要是获取硬点坐标(铰接点、安装点、参考点)及大部件结构(副车架、摆臂、转向节等实际运动过程中会产生变形的部件,在ADAMS Car中我们就可以用柔性体来搭建)再来回顾下上一篇讲到的模型元素1、Hardpoint——硬点(只有位置没有方向)2、Parameter Variable——参数...

weixin_39609407的博客 6476

使用druid自带ConfigTools加密密码

通过druid自带jar包生成加密后的密码,并提取公钥信息

qq_38349413的博客 732

Win本地部署DeepSeek

Ollama 提供了简单的接口,用于创建、运行和管理这些模型,同时还维护了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。重启ollama,具体操作为打开搜索ollama进程,将其结束进程,之后再执行相关模型下载命令即可,或重启电脑!Ollama支持多种DeepSeek模型版本,用户可以根据硬件配置选择合适的模型。配置添加系统环境变量OLLAMA_MODELS,设置其值为新的路径,点击确定应用。安装完成后,在终端输入以下命令,检查Ollama版本。:14B、32B或70B版本,适合高端GPU。

m0_67297673的博客 2389

mysql数据库druid密码加密_Druid实现数据库连接用户密码加密

一、Druid号称是Java语言中最好的数据库连接池。1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。Druid...

weixin_39861823的博客 614

从零到一:如何用YOLOv8和PyQt5打造你的第一个花卉识别桌面应用

本文详细介绍了如何使用YOLOv8和PyQt5从零开始构建一个花卉识别桌面应用。涵盖环境搭建、数据准备、模型训练、界面设计、模型集成与性能优化等全流程,帮助开发者快速掌握深度学习目标识别技术的实际应用。

weixin_29048775的博客 453

信创服务器(麒麟 V10 SP3)安装 NVIDIA GeForce RTX 5070 驱动

本文介绍了在麒麟V10 SP3系统上安装NVIDIA RTX 5070显卡驱动的详细步骤。首先需要关闭nouveau驱动,安装必要的编译环境和工具,确保内核版本与kernel-devel完全一致。最后运行NVIDIA驱动安装程序,关键选择包括启用DKMS支持、编译模块、禁用32位兼容和nouveau驱动。整个流程适用于海光CPU和Blackwell架构GPU的国产操作系统环境。

猿小白的博客 672

mysql数据库druid密码加密_使用Druid生成加密密码,实现mysql数据库链接用户密码加密解密...

参考 :Druid官网https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilterjava---------------------------------------------------------------------------------------------------------------------...

weixin_39601641的博客 380

Week 9 10 Neural Networks

Week 9 10 Neural Networks

金州饿霸吃不饱的博客 403

springboot druid数据库密码加密

pom.xml引入jar <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1...

hybaym的专栏 794

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring Boot项目数据库密码加密实践:基于Druid Filter与AES的优雅方案

在应用开发中,敏感信息(如数据库密码)的明文存储是常见的安全隐患。其核心原理在于配置信息通常以文本形式暴露在代码仓库或配置文件中,一旦泄露将直接威胁数据安全。从技术价值看,实现配置信息的加密存储与运行时自动解密,是保障应用安全、满足合规要求的关键实践。这通常涉及对称加密算法(如AES)与可扩展的应用框架机制。具体到Java生态的Spring Boot项目,结合高性能连接池Druid的Filter扩展机制,可以在几乎无代码侵入的情况下,实现数据库密码的自动解密。这种方案适用于对安全有要求的Web应用、微服务部

weixin_33889245的博客 352

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据库密码在springboot中使用druid自定义加解密

数据库密码在springboot中自定义加解密

yhj198927的博客 3689

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring Boot 3生产环境数据库密码加密实战:Jasypt+Druid配置详解

在软件工程实践中,配置管理是保障应用安全的重要环节,尤其是数据库密码等敏感信息。对称加密技术通过使用同一密钥进行加密和解密,为配置文件中的敏感数据提供了基础保护层。其技术价值在于防止明文密码泄露,满足生产环境的安全基线要求。应用场景广泛覆盖Spring Boot项目的多环境部署,如开发、测试和生产环境。本文聚焦于Spring Boot 3框架,结合Druid连接池与Jasypt加密库,详细解析如何实现application.yml中数据库密码的自动解密,并深入探讨密钥通过环境变量管理的安全策略,以及Dock

weixin_30825199的博客 444

java全家桶之42:JavaConfig=》db config加密解密

本文详细介绍了基于SpringBoot和Druid的MySQL数据源配置方案。通过application.yml文件配置数据库连接参数,采用AES加密存储密码,配置类自动完成解密。核心实现包括:1)MysqlDatasourceConfig类配置Druid连接池参数;2)主应用Dbapi集成Eureka、Feign等微服务组件;3)JavaConfig类处理密码解密和日志记录。该方案支持连接池参数优化,如最大等待时间、初始连接数等配置,并提供了完善的MyBatis集成。加密模块采用Hutool工具实现AES

leijmdas的专栏 1033

Druid连接池SQL密码加密:RSA非对称加密配置与安全实践

在数据库连接池应用中,密码安全是数据安全的第一道防线。其核心原理在于通过加密算法对敏感信息进行转换,确保即使配置文件泄露,攻击者也无法直接获取明文密码。从技术价值看,这不仅是合规要求,更是防止数据泄露、保障业务连续性的关键实践。Druid连接池内置的ConfigFilter过滤器,结合RSA非对称加密方案,实现了这一安全机制:公钥用于加密,可公开配置;私钥用于解密,严格保密于服务器环境。这种方案对业务代码透明,无需改动逻辑,即可在Spring Boot等框架中无缝集成。应用场景广泛覆盖从单体应用到微服务架构

weixin_30414305的博客 328

springboot 项目部署后对配置文件进行密码加密

1.第一种方式:使用srpingboot druid pom.xml引入 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> ...

weixin_39209728的博客 1999

阿里巴巴 Druid 连接池:从入门到生产级配置

Druid 是功能全面、性能优异的数据库连接池,尤其适合需要监控、安全防护、定制化扩展的企业级应用。在 Spring Boot 项目中,结合 Druid 的监控能力,可快速定位数据库性能问题,是生产环境的首选连接池之一。

2201_75355172的博客 3032
下一篇: win7访问本机VMware虚拟机的CentOS上的web项目以及互相通信访问
赔了命3000
博客等级 码龄9年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值