网站突然找不到了 然后降权重 排名不变,网站建设调研报告,网站怎么做图片转链,wordpress主题怎么破解一、前言
在日常开发中#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件
中。 如果这些信息以明文的方式存储#xff0c;你的电脑被拿去修理#xff0c;就会容易泄露#xff0c;一旦被其他人获取到…一、前言
在日常开发中项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件
中。 如果这些信息以明文的方式存储你的电脑被拿去修理就会容易泄露一旦被其他人获取到……你懂得…… 那么如何将配置文件
中的明文信息加密存储就变得至关重要让我们一起来看下吧。
二、加密方式介绍
你想给你的兄弟分享你的考验资料为了保证安全性你选择使用加密。
为了保证安全性不能让人随便看到是首先使用对称加密。你给它设置一个了密码。但是你在发送过程中内容被隔壁张三截获在你告知
你兄弟密码的过程又被截获然后……你的考验资料泄露…
你被你兄弟臭骂了一顿你灵机一动使用了另外一种方式非对称加密。首先你让兄弟准备两把钥匙自己留一把然后另一把传输给你
使用它内容加密最后再把加密的内容传输给你兄弟。这过程无论是钥匙还是加密内容都不担心被截获因为只有你兄弟手中的那把钥匙
才能解密。你兄弟安全的收到考验资料并没有泄露。你以为这种方式却对的安全可以高枕无忧了……
但是有天你的兄弟背叛了你把你的考验资料公之于众
此时你才恍然大悟这世界上根本没有绝对安全的加密方式再可靠的加密也挡不住捉摸不透的人心 所以你决定将考验资料永久
封存你选择了哈希加密这种方式它只管加密不管解密 1对称加密
对称加密就相当于一个带锁宝箱这个钥匙就是密钥或者被称为盐值。如果你想让别人想看的话必须把钥匙给对应的人。这是最常
见的、最方便的加密方式。常见的对称加密算法包括 DES、3DES、AES。
优点
强度和速度 对称加密的优点是速度快适用于大量数据的加密和解密。
缺点 秘钥管理 对称加密的关键在于密钥的管理。为了确保安全性密钥必须在发送者和接收者之间安全地共享。但是如果共享又是
一个问题密钥一旦泄露安全防线被攻陷这又是个问题。
2非对称加密
你手中的钥匙被称为公钥用来把宝箱锁上。你兄弟手中的钥匙被称为私钥要想打开宝箱必须要有对应的私钥才行
优点
安全性 非对称加密提供了更高的安全性因为私钥是保密的只有拥有私钥的人可以解密密文。
密钥交换 非对称加密可以用于安全地交换对称加密的密钥从而解决了对称加密中秘钥分发的问题。
缺点
性能 非对称加密通常比对称加密慢得多因为涉及复杂的数学运算。复杂性 使用非对称加密需要更多的计算资源和算法支持。
3哈希函数
哈希函数主要用于数据完整性验证、密码存储、数字签名等。但是由于哈希函数的单向性质不能直接用于加密解密。 优点
不可逆性 哈希函数是不可逆的即无法从哈希值还原出原始数据这增加了数据的安全性特别适用于密码存储等场景。
高效性 哈希函数通常非常快速对于大量数据的处理非常高效。
固定长度输出 无论输入数据的大小如何哈希函数的输出长度是固定的这使得处理结果更加一致。散列均匀性 好的哈希函数应该将不同的输入映射到均匀分布的输出空间避免冲突。数据完整性验证 通过比较原始数据和哈希值可以验证数据是否在传输或存储过程中被篡改。
缺点 不可恢复性 由于哈希函数是不可逆的一旦数据被哈希化就无法从哈希值还原出原始数据。这在某些应用场景下可能是缺点
比如需要解密数据的情况。
冲突可能性 哈希函数的输出是有限的因此不同的输入可能会产生相同的哈希值这被称为冲突。虽然好的哈希函数会减小冲突
的可能性但仍然需要考虑。
彩虹表攻击 针对较弱的哈希函数攻击者可能使用预先计算的彩虹表来找到哈希值的原始数据。
哈希碰撞 哈希碰撞指的是两个不同的输入产生相同的哈希值攻击者可能利用这种情况来实现欺骗或篡改。
性能问题 对于某些哈希函数特别是在大规模数据上运行时计算哈希值可能会影响性能。 三、SpringBoot项目配置文件加密
通过上面的加密方式介绍我们使用对称加密有人可能问这样不是不安全嘛其实是安全的得看你怎么用
3.1 引入依赖XTHS第一步 1 2 3 4 5 6 7 8 9 10 dependency groupIdcom.github.ulisesbocchio/groupId artifactIdjasypt-spring-boot-starter/artifactId version2.1.2/version /dependency dependency groupIdorg.jasypt/groupId artifactIdjasypt/artifactId version1.9.2/version /dependency 3.2 编写加密工具XTHS第二步 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 package com.zd.channel.cs.utils; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; /** * alibaba druid加解密规则 * 明文密码私钥(privateKey)加密加密密码 * 加密密码公钥(publicKey)解密明文密码 */ public final class JasyptUtils { /** * 加密算法 */ private static final String PBEWITHMD5ANDDES PBEWithMD5AndDES; /** * param text 待加密原文 * param crack 盐值密钥 * return 加密后的字符串 * Description: Jasypt加密PBEWithMD5AndDES */ public static String encryptWithMD5(String text, String crack) { //1.创建加解密工具实例 StandardPBEStringEncryptor encryptor new StandardPBEStringEncryptor(); //2.加解密配置 EnvironmentStringPBEConfig config new EnvironmentStringPBEConfig(); config.setAlgorithm(PBEWITHMD5ANDDES); config.setPassword(crack); encryptor.setConfig(config); //3.加密 return encryptor.encrypt(text); } /** * param text 待解密原文 * param crack 盐值密钥 * return 解密后的字符串 * Description: Jasypt解密PBEWithMD5AndDES */ public static String decryptWithMD5(String text, String crack) { StandardPBEStringEncryptor encryptor new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config new EnvironmentStringPBEConfig(); config.setAlgorithm(PBEWITHMD5ANDDES); config.setPassword(crack); encryptor.setConfig(config); return encryptor.decrypt(text); } public static void main(String[] args) { // String s encryptWithMD5(明文, 密钥); // System.out.println(s); String channelcs1 decryptWithMD5(密文, 密钥); System.out.println(channelcs1); } } 3.3 加密配置类XTHS第三步 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import org.jasypt.encryption.StringEncryptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; public class CustomEncryptorConfig implements StringEncryptor { /** * 加密解密的 密钥 */ private String crack 密钥; Override public String encrypt(String s) { return JasyptUtils.encryptWithMD5(s,crack); } Override public String decrypt(String s) { return JasyptUtils.decryptWithMD5(s,crack); } } 3.4 配置文件XTHS第四步
需要加密的内容使用ENC(密码)格式书写。ENC 是一个特殊的前缀用于标识被加密过的字符串。当你在配置文件中使用 ENC 前缀时Jasypt 会自动识别这是一个被加密的属性然后在应用启动时解密它并将解密后的值应用于相应的配置属性。这允许你在配置文件中以加密的方式存储敏感信息如密码同时在应用中解密并使用这些值。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 spring: datasource: dynamic: datasource: master: #type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver url: …… username: root password: ENC(3hoLALpSHwctWRbBFJGy1x40gMv78JEG) slave: #type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver url: …… username: root password: ENC(3hoLALpSHwctWRbBFJGy1x40gMv78JEG) hikari: minimum-idle: 5 maximum-pool-size: 60 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 3.5 更安全一些
上面我们是把密钥写在了代码中这样做也是有些不太安全的。我们可以使用命令行的方式将密钥传入。
在配置文件中加上如下的配置用于接收启动项目时传入的配置参数 1 2 3 my: encrypted: password: ${jasypt.encryptor.password} 1 java -jar your-application.jar -Djasypt.encryptor.password你的密钥 生成密文时我们也可以不适用工具类而是使用命令步骤如下 在此目录下打开命令行win R - 进入jar包所在目录、或者git在jar包所在目录-邮件打开Git Bash here执行加密命令 加密 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input要加密的值 password加密密码 algorithm加密算法 1 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI inputtest passwordcrack algorithmPBEWITHMD5ANDDES 解密java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input加密后的值 password加密密码 algorithm加密算法 1 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI inputgSBst2q0Kp06AJ9ZpTkwNg passwordcrack algorithmPBEWITHMD5ANDDES