① 在Spring中如何使用加密外部属性文件
1.jdbc.properties文件
driverClassName=com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/testdb
username=root
password=123
1
2
3
4
2.xml文件引入属性文件
<!-- 引入配置文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfiguer"
p:location="class:jdbc.preperties"
p:fileEncoding="utf-8"/>
<!-- 使用属性值 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${drverClassName}"
p:url="${url}"
p:username="${userName}"
p:password="${password}"/>
1
2
3
4
5
6
7
8
9
10
11
3.PropertyPlaceholderConfigurer其他属性
locations:配置多个配置文件(配置 list 一样)
fileEncoding:编码格式
order:如歌配置多个PropertyPlaceholderConfigurer,通过该属性指定优先顺序
placeholderPrefix:指定占位符前缀,默认为“${”
placeholderSuffix:占位符后缀,默认为“}”
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/opt/demo/config/demo-db.properties</value>
<value>classpath:/opt/demo/config/demo-db2.properties</value>
</list>
</property>
</bean>
1
2
3
4
5
6
7
8
4.使用”<”context:property-placeholder”>”引入属性文件
//这种方式比较优雅,但如果想要配置日他额外高级属性,如属性加密,使用数据库保存配置信息等,必须使用扩展的PropertyPlaceholderConfigurer类并使用bean配置方式
<context:property-placeholder location="class:jdbc.properties"/>
//引入多个配置文件 逗号分隔
<context:property-placeholder
location="classpath:constants.properties ,
classpath:constants_new.properties"
fileEncoding="utf-8"
/>
1
2
3
4
5
6
7
8
9
10
11
5.在基于注解的java类配置中引用属性
@Component
public class Test{
//@Value注解可以为Bean注入一个字面量,也可通过@Value("#{proName}")形式注入值
@Value("com.mysql.jdbc.Driver")
private String driverClassName;
@Value("${url}")
private String url;
}
② 怎么给文件加密
具体操作流程如下:
1、给电脑中的文件加密最简单的一个方法就是利用你电脑的操作系统自带的功能来进行设置,也就是EFS加密功能。不过这个功能对硬盘是有一定的要求的,那就是硬盘的分区格式必须是NTFS,不是这个格式的话需要改一下才可以使用加密功能。下面是具体的操启迹作方法。首先要选择需要加密的文件,点击选择“属性”,再选择“高级”,找到“压缩或加密属性”,在“加密内容以便保护数据”选项前面打钩,这样这个文件就被加密了。这时候这个文件的名字是蓝色的,其他使用你电脑的人是无法查看文件内容的。
2、上面这种方法还是有一定的危险性的,那就是如果其他人用主人的账户进入的话还是可以查看的。那么想要保密性高,可以采用第三方加密工具,也就是利用压缩工具来给文件加上密码。常见的压缩工具有WinRAR等,我们就以这个压缩工具为例来介绍一下具体的方法。在需前肆要加密的文件上慧旁轿点击,然后选择“添加到压缩文件”,再找到“高级”标签页,里面有一个“设置密码”,点击就会弹出一个对话框,在对话框中输入密码就可以对相应的文件进行加密了,密码自己要记住哦!
3、除了以上的两种方法之外,在网上还可以找到不少可以给文件加密的第三方工具,不过这些工具很多都是试用版,或者是一些要花钱购买的,有些用一段时间就不能用了。大家如果想用这类加密软件的话,那么可以自己去网上搜一下,使用方法一般都很简单。
③ Spring boot jar包加密(防止放在客户端反编译),XJar加密
需求常用但是时间不常有。有些能客户接触到jar包就很尴尬了。不要问为什么尴尬。
1.首先团绝目标系统-阿里镜像 Centos8.2 不重要 有yum就行皮或正,主要燃悔环境是golang俗称go
2.上操作
3.版本确认,检查
4.把文件传到linux上,注意需要两个文件!重点别漏了 new.jar 和 xjar.go
5.cd到目录,操作
6.得到如下文件
7.运行jar,普通运行
9.打成系统服务systemctl这个不讲了,网络,或者我其他文章有
4.得到xjar.exe,跟linux差不多操作了
5.cd到目录,然后操作
④ springboot上传文件到服务器aes加密
业务需求:数据库中的用户名密码明文存储在配置文件中,不是十分安全。所以将数据库中的用户名密码使用AES对称加密放入配置文件中,达到加密效果。同时也不想使用tomcat等中间件等太繁重,就使用了spring boot 轻量级框架。个人比较菜,轻喷。
关于如何搭建spring boot项目其他的人说的很详细 参考初识Spring Boot框架
入口类代码
js">@Controller
@SpringBootApplication
@EnableAutoConfiguration
{
publicstaticvoidmain(String[]args){
SpringApplication.run(Aesdemo1Application.class,args);
}
}
运行时只要运行main方法 或者打包后java -jar 即可(写成.bat文件 点击运行方便简单)
@Controller
publicclassGetKeyController{
@GetMapping("/getkey")
publicStringgreetingForm(Modelmodel){
model.addAttribute("passwordBean",newPasswordBean());return"index";
}
@PostMapping("/getkey")
publicStringgreetingSubmit(@){
Strings1=AESUtil.encrypt(passwordBean.getPassword(),passwordBean.getVar1());
passwordBean.setVar2(s1);
return"result";
}
}
启动后有这里还有一个控制器类
浏览器地址输入 http://localhost:8080/getkey 即可跳转到greetingForm 方法,赋入PasswordBean属性后 跳转到index.html
PasswordBean 是自己定义的bean类 里面有password var1 var2 3个属性
index.html代码
<!DOCTYPEhtml>
<htmllang="en"xmlns:th="http://www.thymeleaf.org">
<head>
<metacharset="UTF-8"/>
<title>Title</title>
</head>
<body>
<formaction="#"th:action="@{/getkey}"th:object="${passwordBean}"method="post">
<p>密码:<inputtype="text"th:field="*{password}"/></p>
<p>加密字符:<inputtype="text"th:field="*{var1}"/></p>
<p><inputtype="submit"value="Submit"/>
<inputtype="reset"value="Reset"/></p>
</form>
</body>
</html>
注意使用了thymeleaf框架 所以必须引入
输入要加密的和盐即可获得通过post方法到result即可获得加密后字符串
<!DOCTYPEhtml>
<htmllang="en"xmlns:th="http://www.thymeleaf.org">
<head>
<metacharset="UTF-8"/>
<title>Title</title>
</head>
<body>
<h1>Result</h1>
<pth:text="'密码:'+${passwordBean.password}"/>
<pth:text="'加密字符:'+${passwordBean.var1}"/>
<pth:text="'加密后字符:'+${passwordBean.var2}"/>
<ahref="/getkey">Submitanothermessage</a>
</body>
</html>
⑤ 如何能让spring框架加载加密后的.class文件
加密:使用AES加密,将文件的字节码读取,对字节码进行加密后替换兆族轮源文件
Java代码
/**
*
* 字节加密
*/族信
public static byte[] encrypt(byte[] data, String key) throws Exception {
Key k = toKey(Base64.decode(key));
byte[] raw = k.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
/**
*
* 字节加密
*/
public static byte[] encrypt(byte[] data, String key) throws Exception {
Key k = toKey(Base64.decode(key));
byte[] raw = k.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
解密:
1、在tomcat的WebappClassLoader中修改源码(自动义类加载器);
2、修改spring源码Code包源码。
加穗孙密方法
Java代码
public static byte[] decrypt(byte[] data, String key) throws Exception {
Key k = toKey(Base64.decode(key));
byte[] raw = k.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data, String key) throws Exception {
Key k = toKey(Base64.decode(key));
byte[] raw = k.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
在 WebappClassLoader中解密
Java代码
/**
* 判断如需是需要解密的类进行数据处理
⑥ 请问文件属性里的加密是什么作用
文件属性里的加密功能是非常有用的。你自己依然能打开能改写那是因为坦唤闭这个文件是你自己用户名建立的,加密也是你自己加密的,为方便起见,自然支持你改写。但是如果其他用户不是用的你用户名登陆Windows系统,那么被加密的文件是无法打开的,更谈不上改写了,自然就起到了加密保护文件的作用,你不妨可以改用其他用户名登陆你的电脑系统看看你加密的文件能否被改写。当然如果你的电脑只有管理员就是你本人这么个单个用户文件加密也就没什么太大的意义了!
同时有必要提醒你几个关于文件加密的重要问题:
首先准备加密的文件与文件夹所在的磁盘必须采用NTFS文件系统。同时要注意,由于加密解密功能在启动时还不能够起作用,因此系统文件或在系统目录中的文件是不能被加密的,如果操作系统安装目录中的文件被加密了,系统就无法启动。加密后,用户可以像使用普通文件一样直接打开和编辑,又或者执行复制、粘贴等操作,而且用户在加密文件夹内创建的新文件或从其他文件夹拷贝过来的文件都将自动被链猜加密。被加密的文件和文件夹的名称将默认显示为淡绿色,如您的电脑上被加密的文件和文件夹的名称不是彩色显示,您可以单击“我的电脑|工具|文件夹选项”,然后在“文件夹选项”对话框中单击“查看”选项卡,选中“以彩色显示加密或压缩的NTFS文件”复选框即可。
其次有许多朋友在系统发生故障或重新安装系统以后,无法再访问之前他们加密过的文件与文件夹。但此时为时已晚,Windows内建的加密功能与用户的账户关系非常密切,同时用于解密的用户密钥也存储在系统内,任何导致用户账户改变的操作和故障如重装系统等都有可能带来灾难,要避免这种情况让裂的发生,请你一定要在其他地方存储备份好的你重要文件,也慎用文件加密功能!
最后加密文件如何形成加密密匙,如何备份密匙,如何授予其他用户加密文件的访问权限等更详细的问题你可以登陆我的网络空间“珍爱居”参考有关文摘,希望我能帮到你,顺祝你2012年新年快乐,万事如意!
⑦ jasypt加密SpringBoot配置文件
结果
项目里没有使用@SpringBootApplication或者@EnableAutoConfiguration,可以昌和手动在Configuration类上添猛乱加注解@EnableEncryptableProperties,来在整枝迅档个环境的属性启用属性加密。
⑧ 怎么给文件夹进行属性加密是暗的
怎么给文件夹加密
?有些用户想要保护自己的隐私,所以会给文件夹加密,那么该如何给文件夹加密呢?下面给大家介绍3种常见的文件夹加密方法。
方法一、隐藏文件
1、选中自己要加密的文件夹,右键选择属性,然后在常规窗口的属性里面选择隐藏。
2、点击应用和确定后,在文件夹窗口的工具——文件夹选项——查看里面选择不显示隐藏的文件和文件夹。
3、自己想要看到这个文件的时候需要选择显示所有文件和磨圆文件夹才能看到。
方法二、压缩文件并设置密码
1、选择自己要加密的文件夹,点击右键,选择添加到压缩文件,会弹出一个压缩文件名和参数的窗口
3、输入密码后选择确定,注意密码不要太长,以免自己忘记密码。
4、压缩完文件夹要把原文件夹删除,别人就只能看到这个压缩文件夹了,除非他知道密码,否则别人是看不到你的文件内容的。自己要想看文件的话需要输入密码解压后隐游伏才能看到。
方法三、软件加密
1、首先页面顶端展示的软件,然后在电脑上安装。
3、选择文件夹加密,然后点击选择文件夹,浏览并选中自己要加密的文件夹
4、点击确定后会自动弹出一个加密的对话框,输入密码后选择快速加密,也可以选择其他加密类型,然后是密码提示问题,这个要选择一个只有自己知道的问题和答案。
5、点击确定后如果加密成功会演出加密成功的一个对话框。
6、在软件的界面里面也会灶携出现我们加密的文件夹
7、这时我们看一下加密的文件夹,标志已经变了,自己要想打开的话还需要输入密码才能打开
8、然后输入密码打开文件夹,如果忘记密码的话就需要在急救中心解密文件夹
9、然后选择回答问题,回答成功的话文件夹就可以解密了。
⑨ spring提供的几种密码加密方式
第一种:不使用任何加密方式的配置
[html]view plain
<beanid="AuthenticationProvider"
class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<!--明文加密,不使用任何加密算法,在不指定该配置的情况下,Acegi默认采用的就是明文加密-->
<!--<propertyname="passwordEncoder"><beanclass="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">
<propertyname="ignorePasswordCase"value="true"></property></bean></property>-->
</bean>
第二种:MD5方式加密
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<!--false表示:生成32位的Hex版,这也是encodeHashAsBase64的,Acegi默认配置;true表示:生成24位的Base64版-->
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
第三种:使用MD5加密,并添加全局加密盐
Java代码
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--对密码加密算法中使用特定的加密盐及种子-->
<propertyname="saltSource">
<beanclass="org.acegisecurity.providers..salt.SystemWideSaltSource">
<propertyname="systemWideSalt"value="acegisalt"/>
</bean>
</property>
</bean>
第四种:使用MD5加密,并添加动态加密盐
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--对密码加密算法中使用特定的加密盐及种子-->
<propertyname="saltSource">
<!--通过动态的加密盐进行加密,该配置通过用户名提供加密盐,通过UserDetails的getUsername()方式-->
<beanclass="org.acegisecurity.providers..salt.ReflectionSaltSource">
<propertyname="userPropertyToUse"value="getUsername"/>
</bean>
</property>
</bean>
第五种:使用哈希算法加密,加密强度为256
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
第六种:使用哈希算法加密,加密强度为SHA-256
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="SHA-256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:
[java]view plain
packageorg.hz.test;
importjava.security.NoSuchAlgorithmException;
importorg.springframework.security.authentication.encoding.Md5PasswordEncoder;
importorg.springframework.security.authentication.encoding.ShaPasswordEncoder;
publicclassMD5Test{
publicstaticvoidmd5(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
//false表示:生成32位的Hex版,这也是encodeHashAsBase64的,Acegi默认配置;true表示:生成24位的Base64版
md5.setEncodeHashAsBase64(false);
Stringpwd=md5.encodePassword("1234",null);
System.out.println("MD5:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_256(){
ShaPasswordEncodersha=newShaPasswordEncoder(256);
sha.setEncodeHashAsBase64(true);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希算法256:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_SHA_256(){
ShaPasswordEncodersha=newShaPasswordEncoder();
sha.setEncodeHashAsBase64(false);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希算法SHA-256:"+pwd+"len="+pwd.length());
}
publicstaticvoidmd5_SystemWideSaltSource(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
md5.setEncodeHashAsBase64(false);
//使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可
Stringpwd=md5.encodePassword("1234","acegisalt");
System.out.println("MD5SystemWideSaltSource:"+pwd+"len="+pwd.length());
}
publicstaticvoidmain(String[]args){
md5();//使用简单的MD5加密方式
sha_256();//使用256的哈希算法(SHA)加密
sha_SHA_256();//使用SHA-256的哈希算法(SHA)加密
md5_SystemWideSaltSource();//使用MD5再加全局加密盐加密的方式加密
}
}
⑩ 24. springboot常用starter_jasypt_密码加密
Jasypt Spring Boot 为 Spring Boot 项目中的属性源提供加密支持
springboot项目通过jasypt-spring-boot-starter加密配置
写一个测试类生成密文余迟简
可配置在竖裤application.yml文件中(这种方式不安全)
推荐在JVM启动参数中设置
在idea中配置旦卖如下:
-Djasypt.encryptor.password=salt_hong
启动类可以这么加
测试类可以这么加
编写测试类
结果: