长春好的做网站公司有哪些,怎样做酒店网站ppt,网页设计视频教程-响应式手机网站制作,十堰市建设工程管理处网站1.为什么要有这个需求#xff1f;
一般当我们自己练习的时候#xff0c;username和password直接是爆露出来的
假如别人路过你旁边时看到了你的数据库账号密码#xff0c;他跑到他的电脑打开navicat直接就是一顿连接#xff0c;直接疯狂删除你的数据库#xff0c;那可就废…1.为什么要有这个需求
一般当我们自己练习的时候username和password直接是爆露出来的
假如别人路过你旁边时看到了你的数据库账号密码他跑到他的电脑打开navicat直接就是一顿连接直接疯狂删除你的数据库那可就废了所以像这种重要的敏感信息一般是加密过后显示出来的也就是数据的脱敏一般公司你看到的数据库连接信息是这样的。 这显然就是加密过后的但是数据库连接时如果获取到的是你加密过后的密码那肯定是错误的所以我们需要在数据库获取到信息之前把它给解密切记解密是在获取到数据之前进行的。
2.jasypt是如何保证数据安全的
可能你会好奇它既然能解密那我拿着你的密文去调用jasypt提供的解密方法(api)去解密不就行了吗但是jasypt可不是这么干的它提供了一个盐salt它加密和解密是如下过程进行的。
可以看出没有盐你就算知道密文也没用。也可以说盐就是打开你金库的钥匙。此时你可能会好奇那密文肯定是代码里面生成的啊那你生成的时候盐salt和原密码肯定也是写在代码里了那不也不安全吗其实这个密文是我们提前通过测试工具类生成好的再放到配置文件中生成好以后测试工具类就可以直接删除了所以盐和原密码不会暴漏在代码中最终只有你知道。
3.SpringBoot项目中如何使用jasypt
3.1引入依赖
!--jasypt--
dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.0.3/version
/dependency
3.2创建jasypt工具类
主要用于提前进行加密和解密的
package com.fzy.utils;import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;public class JasyptPasswordUtil {private static final String PBEWITHMD5ANDDES PBEWithMD5AndDES;private static final String PBEWITHHMACSHA512ANDAES_256 PBEWITHHMACSHA512ANDAES_256;/*** 加密* param salt 你设置加密用的盐* return 加密类PooledPBEStringEncryptor所需要的配置类*/public static SimpleStringPBEConfig getJasyptConfig(String salt){//加解密配置SimpleStringPBEConfig config new SimpleStringPBEConfig();config.setPassword(salt);//配置盐极其重要config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);//加密算法//下面的配置不用关心config.setKeyObtentionIterations(1000);config.setPoolSize(1);config.setProviderName(SunJCE);config.setSaltGeneratorClassName(org.jasypt.salt.RandomSaltGenerator);config.setIvGeneratorClassName(org.jasypt.iv.RandomIvGenerator);config.setStringOutputType(base64);return config;}/*** 加密方法* param salt 输入盐* param text 输入需要加密的文本* return 密文*/public static String encryptText(String salt, String text){PooledPBEStringEncryptor encryptor new PooledPBEStringEncryptor();//加密类SimpleStringPBEConfig config getJasyptConfig(salt);//获取并设置加密配置类encryptor.setConfig(config);String encryptText encryptor.encrypt(text);//进行加密return encryptText;}/*** 解密方法此处没什么用就是用来自己看看能不能解密* param salt 输入盐* param text 输入需要加密的文本* return 明文*/public static String decryptText(String salt, String text){PooledPBEStringEncryptor encryptor new PooledPBEStringEncryptor();SimpleStringPBEConfig config getJasyptConfig(salt);encryptor.setConfig(config);String decryptText encryptor.decrypt(text);return decryptText;}public static void main(String[] args) {//生成的密文将来放到你yml文件中例如数据库的用户名密码等敏感信息String encryptText encryptText(biecaile, root);System.out.println(加密后 encryptText);String decrypt decryptText(biecaile, encryptText);System.out.println(解密后 decrypt);}}
运行后的结果
稍微了解两个加密算法PBEWithMD5AndDES和PBEWITHHMACSHA512ANDAES_256 这两个算法跟jasypt的版本有关如果我们不配置加密算法无论是3.0还是2.0好像加密都是PBEWithMD5AndDES但是解密如果2.0.xxx是使用的PBEWithMD5AndDES3.0使用的是PBEWITHHMACSHA512ANDAES_256此处不是指我们自己测试去解密而是指再配置完yml文件或者程序参数后自己去解密(下面)所以如果解密算法与加密不一致就会报错(一般启动项目就会报错)最好指定加密算法像我是3.0版指定加密算法为PBEWITHHMACSHA512ANDAES_256 那在yml文件中就不用再配置解密算法了。配一下当然最好。
3.3配置yml文件
jasypt:encryptor:password: biecaile #解密盐值algorithm: PBEWITHHMACSHA512ANDAES_256 #解密算法
test:password: ENC(MsGb7KJD6ZxdEH5O42MMlDVH6mvtP46IlwVqbXq/CHQR75x2WG7YyOf3Ootndd)
其中的test:password是我们自定义的主要用于测试ENC()这个是jasypt自动识别yml属性值的一个标识只要加上当前值就会被解析成明文里面存放的是我们生成的密文。
3.4编写读取yml文件属性值的配置类TestConfig
这里主要是为了测试能不能在获取到属性之前密文已经被解密了也就是说此处如果正确的话获取到的就是我们的明文“root”,实际工作根本不需要
package com.fzy.config;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;Configuration
Data
public class TestConfig {Value(${test.password})private String password;
}3.5随便编写一个TestController去测试获取该数据
Controller
RequestMapping(/test)
public class TestController {Autowiredprivate TestConfig testConfig;RequestMapping(/getText)ResponseBodypublic String getText(){return testConfig.getPassword();}
} 结果发现获取到的是明文已经成功了
4.能在配置文件中配盐值salt吗
肯定是不行的这样salt直接就爆露出来了很危险尤其是放在代码中也很容易就发现一般不会写在配置文件中的我们可以把它放到启动类的程序实参中 填写--jasypt.encryptor.password你的盐值salt然后applyok确定就行。配置完以后把你在配置文件中的password所谓的salt去掉就行结果一样的。一般只要salt配的不对程序启动就会直接报错。
总结这样的话就算我把代码给你你都跑不起来项目因为你没有salt就配不了然后你只能去问我要我就不给你那么你就破解不了数据库的密文你就别想连上我的数据库。