java-信息安全(十九)加密工具Jasypt

更新时间:2023-05-12 02:08:37 阅读: 评论:0

java-信息安全(⼗九)加密⼯具Jasypt
⼀、概述
  Jasypt 这个Java类包为开发⼈员提供⼀种简单的⽅式来为项⽬增加加密功能,包括:密码Digest认证,⽂本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。
  Jasypt是⼀个Java库,可以使开发者不需太多操作来给Java项⽬添加基本加密功能,⽽且不需要知道加密原理。
  根据Jasypt⽂档,该技术可⽤于加密任务与应⽤程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括⾼安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、⽂本、数字和⼆进制⽂件。Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应⽤配置的集成功能,⽽且提供⼀个开放的API从⽽任何⼀个Java Cryptography Extension都可以使⽤Jasypt。  Jasypt还符合RSA标准的基于密码的加密,并提供了⽆配置加密⼯具以及新的、⾼可配置标准的加密⼯具。
    1、该开源项⽬可⽤于加密任务与应⽤程序,例如加密密码、敏感信息和数据通信
    2、还包括⾼安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、⽂本、数字和⼆进
制⽂件。
    3、Jasypt还符合RSA标准的基于密码的加密,并提供了⽆配置加密⼯具以及新的、⾼可配置标准的加密⼯具。
    4、加密属性⽂件(encryptable properties files)、Spring work集成、加密Hibernate数据源配置、新的命令⾏⼯具、URL加密的Apache wicket集成以及升级⽂档。
    5、Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应⽤配置的集成功能,⽽且提供⼀个开放的API从⽽任何⼀个Java Cryptography Extension都可以使⽤Jasypt。
⼆、使⽤
2.1、jar使⽤
2.1.1、shell下jar使⽤加密
Maven下载好的jar包加密\Maven\org\jasypt\jasypt\1.9.3\jasypt-1.9.3.jar
cd ~/.m2/repository/org/jasypt/jasypt/1.9.3
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=G0CvDz7oJn6 algorithm=PBEWithMD5AndDES input=root
输出:
----ARGUMENTS-------------------
input: root
algorithm: PBEWithMD5AndDES
password: G0CvDz7oJn6
----OUTPUT----------------------
wo9sTA8V7t+kKHKtwzOVSw==
2.1.2、shell下jar使⽤解密
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=wo9sTA8V7t+kKHKtwzOVSw== password=G0CvDz7oJn6 algorithm=PBEWithMD5AndDES
解密值
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: wo9sTA8V7t+kKHKtwzOVSw==
password: G0CvDz7oJn6
----OUTPUT----------------------
root
2.1.3、详细说明
加密⼊⼝类:org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI
解密⼊⼝类:org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI
input:你要加、解密的字符串
password:密钥⼝令
algorithm:加密算法
OUTPUT:下⾯的字符串就是⽣成的密⽂、明⽂
配置项
Key(配置项)Required(必
须)
Default Value(默认值)ptor.password True-
则要设置成: org.jasypt.salt.RandomIVGenerator.
2.2、代码⽅式1-原⽣
2.2.1、加密解密-⽂本原⽣使⽤
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.3</version>
</dependency>
⽰例
public class BasicTextEncryptorTest {
BasicTextEncryptor textEncryptor;
@Before
public void tUp() {
textEncryptor = new BasicTextEncryptor();
textEncryptor.tPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
}
@Test
public void encrypt() {
/
/ 加密
System.out.pt("root@1234"));
//TJetNWzmC4os1CCb+gHtz+5MpL9NFMML
//KCTSu/Dv1elE1A/ZyppCHgJAAwKiez/p
}
@Test
public void decyptPwd() {
// 解密
//        root@1234
System.out.println(textEncryptor.decrypt("TJetNWzmC4os1CCb+gHtz+5MpL9NFMML")); //        root@1234
System.out.println(textEncryptor.decrypt("KCTSu/Dv1elE1A/ZyppCHgJAAwKiez/p"));
}
}
2.2.2、单向散列
  ⼀般在做⽤户认证的时候,通常会使⽤MD5做简单的散列,然后登录时必须MD5值实现。同样的需求,也可以使⽤Jasypt来实现。
  BasicPasswordEncryptor
@Test
public void encrypt() {
BasicPasswordEncryptor textEncryptor = new BasicPasswordEncryptor();
String encryptPassword = ptPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
System.out.println(encryptPassword);
boolean checkPassword = textEncryptor.checkPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7", encryptPassword);
System.out.println(checkPassword);
}
2.2.3、多线程加解密
  在多核机器上运⾏时,我们希望并⾏处理解密处理。为了获得良好的性能,我们可以使
⽤PooledPBEStringEncryptor 和tPoolSize() API来创建⼀个解密线程池。它们中的每⼀个都可以由不同的线程并⾏使⽤:
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.tPoolSize(4);
encryptor.tPassword("some-random-data");
encryptor.tAlgorithm("PBEWithMD5AndTripleDES");
  最好将池⼤⼩设置为等于机器的核⼼数。加密和解密的代码与以前的代码相同。
2.3、代码⽅式2-springboot结合
  配置⽂件参看:
pom
<dependency>
<groupId>com.github.ulisbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
增加JasyptConfig 配置类
@Configuration
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.tPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
//        config.tAlgorithm("PBEWithMD5AndDES");//默认配置
//        config.tKeyObtentionIterations("1000");//默认配置
config.tPoolSize("4");
//        config.tProviderName("SunJCE");//默认配置
//        config.tSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");//默认配置
/
/        config.tStringOutputType("ba64");//默认配置
encryptor.tConfig(config);
return encryptor;
}
}
配置⽂件的写⼊和Spring XML的基本类似。l相当于l,curity.properties就是要进⾏属性替换的配置⽂件。
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/abc?uSSL=fal
spring.datasource.urname=root
spring.datasource.password=${jdbc.password}
curity.properties
jdbc.password=ENC(TJetNWzmC4os1CCb+gHtz+5MpL9NFMML)
启动类增加
@SpringBootApplication
@EnableEncryptableProperties
@PropertySource(value = {"classpath:curity.properties"},ignoreResourceNotFound = fal)
public class SpringRunnerMain {
public static void main(String[] args) {
SpringApplication.run(SpringRunnerMain.class, args);
}
}
2.4、关于这个⼝令的配置⽅式
  jasypt的作者建议是把这个盐值放在系统属性、命令⾏或是环境变量来使⽤,⽽不是放在配置⽂件
  还有种常⽤⽅式,直接配置⽅式(这样⼝令就暴露在这个配置⽂件⾥⾯,不建议);密⽂使⽤ENC(……),密钥放在代码中,配置分开1、启动命令
  jar: 命令:java -ptor.password=jasypt -jar xxx.jar
  war:到Tomcat的bin⽬录下,打开⽂件catalina.bat/catalina.sh,添加如下参数,然后保存:window:t JAVA_OPTS="-ptor.password=jasypt"  , Linux:JAVA_OPTS="-ptor.password=jasypt"
或者直接在tomcat bin ⽬录新建tenv.bat tenv.sh
⽂件内容如下
Windows:t JAVA_OPTS="-ptor.password=jasypt"
Linux:export JAVA_OPTS="-ptor.password=jasypt"
程序会默认使⽤。
2、获取环境变量
Properties properties = Properties();
Set<Object> objects = properties.keySet();
for (Object object : objects) {
System.out.println("key:" + object + "---:" + (object));
}
Map<String, String> getenv = v();
for (Map.Entry<String, String> entry : Set()) {
System.out.Key() + "---:" + Value());
}
三、核⼼类库说明
3.1、加密⼯具类【以⽂本text为例】
普通⽂本实现了如下三种⽅式
以及参看Strong,AES,只是算法不⼀致
  BasicTextEncryptor→PBEWithMD5AndDES
  StrongTextEncryptor→PBEWithMD5AndTripleDES
  AES256TextEncryptor→PBEWithHMACSHA512AndAES_256
主要是【参看BasicTextEncryptor】
public final class BasicTextEncryptor implements TextEncryptor {
private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
public BasicTextEncryptor() {
}
public void tPassword(String password) {
}
public void tPasswordCharArray(char[] password) {
}
public String encrypt(String message) {
pt(message);
}
public String decrypt(String encryptedMessage) {
ptor.decrypt(encryptedMessage);
}
}
更多pbe算法可以参看:
参看上述⼯具类编写⽅式,以及上述PBE加密算法,编写:PBEWITHSHA1ANDRC4_128 ⼯具类:RC128TextEncryptor public class RC128TextEncryptor implements TextEncryptor {
private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
public RC128TextEncryptor() {
}
public void tPassword(String password) {
}
public void tPasswordCharArray(char[] password) {
}
public String encrypt(String message) {
pt(message);
}
public String decrypt(String encryptedMessage) {
ptor.decrypt(encryptedMessage);
}
}
View Code
测试:
public class RC128TextEncryptorTest {
RC128TextEncryptor textEncryptor;
@Before
public void tUp() {
textEncryptor = new RC128TextEncryptor();
textEncryptor.tPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
}
@Test
public void encrypt() {
/
/ 加密
System.out.pt("root@1234"));
//zjhmIP38jmvob56qyNevHjs=
//iMX2aR70CkLGdtlAdhe2XKI=
}
@Test
public void decyptPwd() {
// 解密
//        root@1234
System.out.println(textEncryptor.decrypt("zjhmIP38jmvob56qyNevHjs="));
//        root@1234
System.out.println(textEncryptor.decrypt("iMX2aR70CkLGdtlAdhe2XKI="));
}
}
View Code

本文发布于:2023-05-12 02:08:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/593359.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:加密   配置   密码   功能   提供
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图