MD5、AES、Jasypt加密方式的简要介绍与对比

Jasypt 开源加密库使用教程 Jasypt 加密框架概述 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。 2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。 3、 阅读详情

MD5、AES、Jasypt加密方式的简要介绍与对比

1 前言

目前做的项目中用的加密工具有:MD5、AES加密工具(旧的)及Jasypt加密工具(新增),对这三种加密工具的简要原理和应用做了整理。内容参考的文章见第6部分。如下是各工具在系统中的应用:

  • MD5: 主要用在系统用户名密码的加密上
  • AES:除数据库密码解密外、系统用于密码等所有的均使用该加密工具:redis、邮件、账户等
  • Jasypt:目前只计划实现数据库密码的加解密,配合实现数据库自动化运维

2 MD5加密算法

2.1简介

  • MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位的散列值,用于确保信息传输完整一致。
  • MD5常用于防止数据被篡改、防止直接存储明文、防止抵赖(数字签名)

2.2 原理

加密要素
  • 明文信息(即不需要秘钥之类的加密要素)
唯一性
  • 通过密码散列函数产生输入信息对应的128位的散列值,同一份信息原文计算后的散列值一定是一样的;
  • 所以通过对比两个散列值是否一样可以判断原文信息是否被篡改;
  • 但理论上来说一个MD5是可能对应无数多个原文,但是在实际现实应用中,原文长度有限,在某个范围内让两个原文对应上同一个MD5是非常困难。
不可逆性
  • 密码散列函数:散列(哈希)函数的一种,即可以解释为一种单向函数,很难从函数的输出结果推出它的输入是什么;
  • 算法计算过程中原文的部分信息是丢失的,所以无法将一个MD5密文进行解密(所以从解密角度看,MD5不算一个加密算法)。

2.3 应用范围

防止数据被篡改

比如在发送文件前,先传输文件使用MD5生成的MD5值,再传输文件,通过对收到的文件生成的MD5值与之前的MD5值对比来判断是否文件在传输过程中被篡改

避免直接存储明文

保存用户密码,这样即使数据库中的密码数据信息被泄露出去,也无法通过解密获得密码原文; 但是对于用户,系统根据用户输入的密码用MD5再次产生MD5值,和数据库的数据进行比较是否一致来确定用户输入的密码的合法性

数字签名

利用唯一性,例如A写了一个文件,认证机构用MD5产生摘要信息保存,只要再次对这个文件用MD5生成摘要信息,和原先保存的那份摘要信息一对比,只要一致,就证明是A写的那个文件,A无法抵赖

2.4 安全性上的问题

暴力破解风险

MD5虽然无法逆向解密,但是却可以“正向暴力破解”。 尽管暴力破解很费时间,但对于诸如密码的加密存储,往往若密码过短过简单则容易被暴力破解。很多在线工具提供通过密文匹配对应输入的原文。如后面示例,其中的一个简单密码就存在这个库中,很轻松就被找出来:

  • 简单密码:用MD5生成password123456的MD5值, 用这个MD5值去查询,可以查询到原文
    在这里插入图片描述
    在这里插入图片描述

  • 复杂密码:用MD5生成哈哈哈XSWL2333的MD5值, 用这个MD5值去查询,则目前这个在线工具还无法匹配到这个结果的原文

在这里插入图片描述
在这里插入图片描述

破解原理

实际上上述的“暴力破解”不是简单的一个一个去生成MD5值再去比较,也不是“字典法”预先构建一个庞大的明文->密文的库,而是在字典法上改进的构建彩虹表的方式。 但都本质都是通过输入MD5值得方式查找对应的原文。

安全规避方式

因此MD5应用在例如密码加密中,对于密码的要求应该不能过于简单,所以密码的设置不应过于简单; 常见的要求就是大小写字母+数字+字符,四选三来组成密码(公司手册对员工门户、个人电脑的密码要求就是如此)

2.5 项目中的应用

  • 用于用户密码的加密,包括对用户密码加密后存储以及登录效验用户密码是否正确
  • 封装了MD5Util工具类,提供三个加密方法直接调用:
    字节数据的加密:getMD5(byte[] bytes)
    字符串数据的加密:getMD5(String str)
    文件的加密:getFileMD5(File file)
/**
 * MD5信息-摘要算法5,是一种单向加密算法(不可逆)</br>
 */
public final class MD5Util {
	//用来将字节转换成16进制表示的字符
	private static char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6',
		'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
	/**
	 * 私有构造函数,防止实例化使用
	 */
	private MD5Util() {}
	
	/**
	 * 对参数进行MD5加密
	 * @param bytes 要加密的参数
	 * @return MD5值
	 */
	public static String getMD5(byte[] bytes) {
		String result = null;
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");
			md.update(bytes);
			byte[] temp = md.digest(); //MD5的计算结果是一个128位长整数,用字节表示就是16字节
			char[] chars = new char[32]; //每个字节用16进制表示的话,需要2个字符,所以共32个字符
			
			//对MD5的每个字节转换成16进制的字符
			int k = 0;
			for (int i = 0; i < 16; i++) {
				byte aByte = temp[i];
				chars[k++] = hexDigits[aByte >>> 4 & 0xf];
				chars[k++] = hexDigits[aByte & 0xf];
			}
			
			result = new String(chars);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 对参数进行MD5加密
	 * @param str 要加密的参数
	 * @return MD5值
	 */
	public static String getMD5(String str) {
		try {
			return getMD5(str.getBytes("GBK"));
		} catch (UnsupportedEncodingException e) {
			throw new AppException("MD5加密异常", e);
		}
	}
	
	/**
	 * 计算文件的MD5加密值,注意如果文件较大、计算MD5时可能性能较差
	 * @param file 文件
	 * @return MD5值
	 */
	public static String getFileMD5(File file) {
		FileInputStream in = null;
		String result = null;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			in = new FileInputStream(file);
			byte[] buffer = new byte[1024];
			while (in.read(buffer) != -1) {
				md.update(buffer);
			}
			BigInteger bigInt = new BigInteger(1, md.digest());
			result = bigInt.toString(16);
		} catch (Exception e) {
			throw new AppException("MD5加密异常", e);
		} finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e) {
				throw new AppException("MD5加密时,流关闭异常", e);
			}
		}
		return result;
	}
	
	/**
	 * 计算文件的MD5加密值
	 * @param fileName 文件名
	 * @return MD5值
	 */
	public static String getFileMD5(String fileName) {
		File file = new File(fileName);
		return getFileMD5(file);
	}
}

3 AES加密算法

3.1 简介

  • 高级加密标准(AES,Advanced Encryption Standard)
  • 采用同一个秘钥进行加解密,是一种对称秘钥加密算法,加解密需要秘钥和密文/明文

3.2 原理

加密要素
  • 明文/密文
  • 秘钥
加解密过程

在这里插入图片描述

  • 是一种对称加密算法:即加解密使用的是同一个秘钥,对于同一个明文,用这个秘钥加密出来的密文是一样的;反过来,相同的密文用这个秘钥解密出的结果一定是最开始的明文

什么是非对称加密算法?加解密的秘钥是不同的,例如公钥加密,只有私钥能解密。但算法复杂,加解密速度慢。

3.3 应用

  • 因为是对称加密,所以加密速度快,适合大量数据的加密,且加密的数据可复原
  • 所以应用场景广泛,例如用户信息,实时通信的敏感信息等

3.4 安全性上的问题

安全性
  • 速度快,安全级别高:目前是最安全的加密算法之一
  • 但不是绝对安全,要保证你的秘钥不被泄露,因为AES是对称加密算法,只需要知道秘钥就能解密处所有的加密算法;
安全规避方式
  • 对于系统,秘钥往往写在代码里,所以如果说源代码和数据库数据泄露,那么数据就完全暴露给不法分子,若不法分子只有密文,没有秘钥,那么至少被加密的敏感数据不会被利用。 所以数据加密了并不代表就万无一失。
  • 因此公司有诸如不应该把源代码传到外网等规定,目的之一就是为了防止源代码泄露导致重要或敏感数据泄露

3.5 系统中的应用

  • redis、邮件、Eterm账户等密码或其他信息的加密,应用最多
  • 封装工具类:AESUtil
  1. 私有构造函数:制定加密算法,生成Key
  2. 加解密只需要密文/明文,返回结果
  3. 加密:getEncString(String str)
  4. 解密:getDesString(String str)
/**
 * AES加密算法,采用同一个密钥进行加解密,是一种对称密钥加密算法。
 */
public final class AESUtil {
    //自己定义的秘钥,128bit即16位的随机串。也支持192,25bit,长度越长安全性越高,对应的加解密时间越长
    private final static String KEY_STR = "gOZ+l59TRoBajn3G";
    private final Key key;
    private static AESUtil instance = new AESUtil();
    private static final String ALGORITHM = "AES";
    private static final String RANDOM_ALGORITHM = "SHA1PRNG";

    /**
     * 私有构造函数,防止通过实例化使用
     */
    private AESUtil() {
        try {
            KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);//Java的秘钥生产器,使用的是AES
            SecureRandom random = SecureRandom.getInstance(RANDOM_ALGORITHM);//随机数的算法,NativePRNG和SHA1PRNG
            random.setSeed(KEY_STR.getBytes("GBK"));//用我们设定的秘钥串作为随机数的种子,因为种子是我们固定的,产生的随机数也是固定的
            generator.init(random);
            key = generator.generateKey();//生成的秘钥,我们在加密解密需要用到相同秘钥

        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
            throw new AppException("AES构造函数异常", e);
        }
    }

    public static AESUtil getInstance() {
        return instance;
    }

    /**
     * 对byte[]参数进行加密
     * @param bytes 要加密的参数
     * @return 加密后的参数
     */
    private byte[] getEncCode(byte[] bytes) {
        byte[] result = null;
        Cipher cipher = null;
        try {
            cipher = Cipher.getInstance("AES");//获取算法实例
            cipher.init(Cipher.ENCRYPT_MODE, key);//初始化,入参为加密模式和秘钥
            result = cipher.doFinal(bytes);//进行加密

        } catch (Exception e) {
            throw new AppException("AES加密异常", e);
        } finally {
            cipher = null;
        }
        return result;
    }

    /**
     * 对byte[]参数进行解密
     * @param bytes 要解密的参数
     * @return 解密后的参数
     */
    private byte[] getDesCode(byte[] bytes) {
        byte[] result = null;
        Cipher cipher = null;
        try {
            cipher = Cipher.getInstance("AES");//获取算法实例
            cipher.init(Cipher.DECRYPT_MODE, key);//初始化,入参为解密模式和秘钥
            result = cipher.doFinal(bytes);//进行解密
        } catch (Exception e) {
            throw new AppException("AES解密异常", e);
        } finally {
            cipher = null;
        }
        return result;
    }

    /**
     * 对string参数进行加密
     * @param str 要加密的参数
     * @return 加密后的参数
     */
    public String getEncString(String str) {
        BASE64Encoder base64en = new BASE64Encoder();
        byte[] input = null; //明文
        byte[] output = null; //密文
        String result = null;
        try {
            input = str.getBytes(CommonConstant.CHARSET_NAME);
            output = getEncCode(input);
            result = base64en.encode(output);

        } catch (Exception e) {
            throw new AppException("AES解密异常,参数:" + str, e);
        } finally {
            input = null;
            output = null;
        }
        return result;
    }

    /**
     * 对String参数进行解密
     * @param str 要解密的参数
     * @return 解密后的参数
     */
    public String getDesString(String str) {
        BASE64Decoder base64De = new BASE64Decoder();
        byte[] input = null; //密文
        byte[] output = null; //明文
        String result = null;
        try {
            input = base64De.decodeBuffer(str);
            output = getDesCode(input);
            result = new String(output, CommonConstant.CHARSET_NAME);

        } catch (Exception e) {
            throw new AppException("AES解密异常,参数:" + str, e);
        } finally {
            input = null;
            output = null;
        }
        return result;
    }
}

4 Jasypt加密工具

4.1 简介

Jasypt是一个开源的java库,只需要引入组件就可以使用,开发中无需关注其太多细节即可实现java项目的加密功能; 也因此很难找到相关的资料,因此原理也基本是自己使用和测试结果的总结,不一定严谨。

4.2 原理

加密要素

密文/明文:password
系统钥: sysKey
秘钥:secretKey

加密机制
  • 一套sysKey和secretKey生产的密文是“动态”的(即同一个明文每次加密后的结果不一样); 但这些密文用这一套sysKey和secretKey解密处的结果都一样;
  • 同一套sysKey、secretKey加密后的密文是“固定”的; (准确说不是由这一套加密出来的密文解密不出东西,会报错)
  • 同一系统拥同一套sysKey和secretKey(目前仅是公司DBA那边的规定)
  • 加解密需要三个加密要素,直接调用,无需其他步骤

4.3 应用范围

  • 密码、敏感数据、甚至文件、应用程序
  • 因为无需关注其细节,容易使用,很适合在java项目中实现基本的加密要求

4.4 安全性上的问题

安全规避方式
  • 和AES都是对称加密算法的一种,一样要保证secretKey和sysKey的安全
  • 和AES有点不一样的是,Jasypt加解密需要sysKey和secretKey,所以在系统中使用时,要避免将这两者放在一起,例如都写在一个配置文件

4.5 系统中的应用

  • 目前主要用于数据库连接,对数据库密码的加密,配合公司对数据库安全的要求。
  • password和sysKey由DBA管理提供,自助下载
  • secretKey 由DBA提供(配合Apollo配置中心可以实现开发人员无法接触到secretKey,在一些安全管理实践上很方便)
  • 封装工具类JasyptForDbUtil
  1. 使用到原生工具:JasyptUtil(直接调用,无需其他步骤)
    public String encryptString(String sysKey, String secretKey, String str)
    public String decryptString(String sysKey, String secretKey, String encString)
  2. 秘钥写在代码里,与sysKey和密文分开,避免都在一个地方
    private final static String SECRET_KEY = “aSecretKey”;
  3. 加密:public String getEncStr(String sysKey, String plainText)
  4. 解密:public String getDesStr(String sysKey, String cipherText)
/**
 * Jasypt 加密算法,用于数据库密码加解密 <br>
 * 加解密需要 sysKey、secretKey、密文或明文 <br>
 * 加密生成的密码是动态的,但与同一组sysKey、secretKey是对应的 <br>
 */
public final class JasyptUtil {
    /**
     * 秘钥,不同系统的秘钥不同 <br>
     * 秘钥与配置文件密文分开,避免都在一个地方 <br>
     */
    private final static String SECRET_KEY = "mySrcretKey";

    private static com.mytest.jasypt.util.JasyptUtil jasyptUtil = new com.mytest.jasypt.util.JasyptUtil();

    private static JasyptUtil instance = new JasyptUtil();

    public static JasyptUtil getInstance() {
        return instance;
    }

    /**
     * 私有构造函数,防止通过实例化使用
     */
    private JasyptUtil() {
    }

    /**
     * Jasypt 加密
     * @param sysKey    sysKey
     * @param plainText 要加密的明文
     * @return 加密后的字符串
     */
    public String getEncStr(String sysKey, String plainText) {
        try {
            return jasyptUtil.encryptString(sysKey, SECRET_KEY, plainText);
        } catch (Exception e) {
            throw new AppException("Jasypt加密异常" + e);
        }

    }

    /**
     * Jasypt 解密
     * @param sysKey     sysKey
     * @param cipherText 要解密的密文
     * @return 解密密后的字符串
     */
    public String getDesStr(String sysKey, String cipherText) {
        try {
            return jasyptUtil.decryptString(sysKey, SECRET_KEY, cipherText);
        } catch (Exception e) {
            throw new AppException("Jasypt解密异常" + e);
        }
    }
}

4.6延伸:实现对配置文件属性的解密(使用Jasypt)

系统中加密工具一个重要的应用是对一些配置文件的信息进行解密,例如数据库连接的密码使用密文保存在配置文件中,需要解密后使用

1 读取配置文件,对配置文件属性进行解密并重置操作

重写PropertyResourceConfigurer类的convertProperties方法,启动时执行该方法,读取配置文件所有属性,并解密重设需解密的属性值; 该方法由PropertyResourceConfigurer自身提供缺省实现,用于对属性值做必要的转换处理,缺省不做任何处理;
是否解密通过是否存在同名属性名+.encode,属性值为对应加密算法,根据配置的加密算法值使用对应加密工具进行解密
伪代码

    @Override
    protected void convertProperties(Properties props) {
        //获取所有配置文件属性信息
        Enumeration propertyNames = props.propertyNames();
      
        while (propertyNames.hasMoreElements()) {
            //循环这些属性
            if (name.endsWith(".encode")) {
                value = props.getProperty(name); //获取加密算法,看采用哪种加密工具进行解密
                name = name.substring(0, name.indexOf(".encode")); //找待解密参数名
                value = decode(name, value, props); //进行解密,获取解密后的参数值

                props.setProperty(name, value);//用解密结果重设属性值
            }
        }
    }
2 修改相关配置文件
<!-- Spring修改相关配置文件-->
<bean id="propertyConfigurer" class="com.mytest.common.config.DecryptPropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:public.properties</value>
            <value>classpath:jdbc.properties</value>
            <value>classpath:redis.properties</value>
        </list>
    </property>
</bean>
# public.properties配置文件
# jasypt加密使用到的sysKey,同一系统sysKey相同
jasypt.sysKey=sysKey串
# jdbc.properties配置文件
oracle.name=dbname
oracle.username=username
oracle.password=密文
oracle.password.encode=JASYPT

6 参考资料

Jasypt加密/解密工具嵌入Spring boot框架的使用教程 Jasypt (Java Simplified Encryption) 是一个开源的Java库,专注于简化加解密过程,特别适合在Java应用程序中处理敏感数据,如密码、密钥或任何其他需要保护的信息。Jasypt的目标是提供一个易于使用的API,使得开发者能够轻松地集成加密功能,而不必成为加密专家。 阅读详情

相关推荐

加密--01--Jasypt加密/解密工具

在大多数项目中,配置文件中的 mysql 数据库密码、redis 密码等其他敏感性密码都是以明文形式存在,这种配置本身没有任何问题,但是,在某些情况下,可能会对公司造成不可挽救的损失,比如:某一天,小明因为加班过度,头脑发昏,不小心把公司项目上传到自己的GitHub 仓库里面了,导致的后果就是,公司数据库用户名密码泄露,被某些大佬加以利用…所以,基于上面这种情况,加入配置文件中数据库用户密码等其他敏感信息都是经过加密处理过的呢???是不是可以大概率避免这种情况。Jasypt因此应运而生。

时光里的博客 4425

小白入门之 Jasypt 加密和解密

文章目录摘要Jasypt 简介Jasypt 特征下载 JasyptJasypt 环境依赖要求Jasypt 用法简单用法:utils一般用法使用精简版 Jasypt从命令行加密:Jasypt CLI 工具高级用法加密器和摘要器的高级配置Web PBE Configuration将 Jasypt 与非默认 JCE 提供程序一起使用按日期类型Encrypting passwordsEncrypting textsEncrypting numbersEncrypting binariesEncrypting app

Gjw_java的博客 2万+

Spring Boot配置加密实战:使用Jasypt保护数据库密码等敏感信息

在软件开发和部署中,敏感信息保护是基础安全实践。配置加密技术通过将配置文件中的明文信息转换为密文,防止敏感数据泄露。其核心原理是在应用启动时动态解密,对业务代码透明,实现了安全与便利的平衡。这项技术的核心价值在于以较低成本显著提升应用安全性,尤其适用于数据库连接信息、API密钥等敏感配置的保护。在Spring Boot生态中,Jasypt作为轻量级加密库,通过即插即用的方式与Spring Boot无缝集成,支持多种加密算法,并能与配置中心结合使用。本文以Jasypt为例,详细解析如何实现配置文件的加密解密,

weixin_34326179的博客 387

Jasypt实现数据加解密(脱敏)

场景一:对配置文件中的裸露的密码进行加密 1、添加依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version>

smiling 1万+

Java加密库Jasypt实战解析与应用

Jasypt(Java Simplified Encryption)是一个专为Java平台设计的轻量级加密工具库,旨在降低开发者在应用中集成加密功能的复杂度。它不仅封装了底层加密算法的实现细节,还提供了简单易用的API接口,支持多种加密方式,如对称加密、摘要算法等,广泛适用于Java SE、Spring Boot等各类Java项目。通过Jasypt,开发者可以轻松实现字符串加密、配置文件敏感信息保护、环境变量加密等功能,极大提升了应用的安全性。

weixin_42128315的博客 1127

从URDF到Gazebo:一个完整的ROS2机械臂仿真项目实战与避坑指南

本文提供了一个完整的ROS2机械臂仿真项目实战指南,详细讲解了从URDF建模、ROS2 Control配置、MoveIt2集成到Gazebo仿真的全流程。文章重点分享了URDF惯性参数设置、Gazebo插件选择、MoveIt2配置修正等关键步骤的避坑经验,帮助开发者快速搭建可用的六轴机械臂仿真环境,实现从静态模型到物理仿真的跨越。

weixin_29279153的博客 274

好用的敏感信息加密库Jasypt

功能:Jasypt提供了一个简单且安全的方式来加密和解密数据,支持多种加密器,适用于各种场景,如数据库密码加密、API密钥保护、用户密码加密等。特点简单易用:Jasypt提供了简单易用的API,开发人员可以轻松集成到项目中。强大的加密功能:支持多种加密算法和加密器,可以根据具体需求选择合适的加密方式。高安全性:基于标准的加密技术,确保数据的安全性。

xuweilin的博客 2595

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

从零到一:Jasypt在SpringBoot中的实战加密策略与安全演进

本文详细介绍了Jasypt在SpringBoot中的实战加密策略与安全演进,涵盖从基础集成到高级应用的全面指南。通过密钥加密、加密盐值等核心技术,帮助开发者构建安全的数据保护方案,并分享生产环境中的最佳实践与性能优化技巧。

mqtt6iot的博客 420

运放电路实战:5分钟搞定加法器与减法器的电路设计与调试(附避坑指南)

本文从实战角度出发,详细讲解了运算放大器加法器与减法器的电路设计与调试方法。针对加法器,重点分析了利用“虚地”特性简化设计和选型要点;对于减法器,则深入剖析了决定精度的核心——电阻匹配问题,并提供了使用电阻网络等提升共模抑制比的实用策略。文章还分享了从仿真到实物焊接的完整流程与常见避坑技巧,帮助电子爱好者快速掌握这两种基础运放电路。

weixin_28323057的博客 466

ENSP从下载到运行:用虚拟机搭建华为认证实验环境全流程(含USG6000V镜像配置)

本文提供了一份详细的华为ENSP仿真平台从下载、安装到配置USG6000V防火墙镜像的完整指南。内容涵盖前置软件安装、ENSP主程序配置、核心设备镜像导入及虚拟机资源分配策略,旨在帮助网络工程师和学习者快速搭建一个稳定、功能齐全的华为认证实验环境,为备考和模拟企业网络部署打下坚实基础。

weixin_29230865的博客 533

微服务nacos或者yml配置内容部分加密jasypt

【代码】微服务nacos或者yml配置内容部分加密jasypt。

m0_49605579的博客 3216

SAP公司间STO业务解析(包含主数据解析、后台配置解析、前台业务演示)

SAP公司间STO业务解析

ww114784的博客 1017

加密解密工具全解析:从AES、RSA原理到实战应用与安全实践

数据加密是信息安全的基础,其核心在于通过算法将明文转换为不可读的密文,确保数据在传输和存储过程中的机密性、完整性与真实性。对称加密算法如AES,使用同一密钥进行加解密,效率高,适用于大量数据加密;非对称加密算法如RSA,则采用公钥和私钥配对,解决了密钥分发难题,常用于密钥交换与数字签名。哈希函数如SHA-256,则生成唯一的数字指纹,用于验证数据完整性。这些技术在网络通信、数据存储、身份认证等场景中发挥着关键作用。本文以MooTool加密解密工具为例,深入探讨了AES、RSA等主流算法的实现原理、参数配置及

weixin_33744141的博客 406

华为OD机试2025A卷 - 用户调度问题(Java & Python& JS & C++ & C )

题目要求每个用户依次选择当前所能选择的最小资源消耗策略,并且若有多个策略的资源消耗相同,则选择最后一个策略。每个用户的选择是独立的,只考虑该用户的策略和相邻用户的约束,不考虑整个调度序列的全局资源消耗。每个用户根据自己的当前状态(即自己的三种选择的资源消耗)做出局部最优选择:在当前可选的策略中,选择消耗最小的那个。如果有多个最小值,则选择最后一个(根据题意)。这一选择是局部的最优,即在当下最有利的选择,但并不保证最终的整体系统资源消耗是最小的。

算法大师! 1万+

YOLOv11改进 | 注意力篇 | YOLOv11引入CBAM注意力机制

我们的实验表明各种模型的分类和检测性能得到了一致的改进,证明了 CBAM 的广泛适用性。简单介绍:CBAM的主要思想是通过关注重要的特征并抑制不必要的特征来增强网络的表示能力。模块首先应用通道注意力,关注"重要的"特征,然后应用空间注意力,关注这些特征的"重要位置"。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 2万+

SpringBoot 中的加密模块

本文介绍了 Spring Boot 中的加密模块,包括对称加密、非对称加密和哈希加密等。我们提供了相应的代码示例,希望能够帮助读者更好地理解 Spring Boot 中的加密模块。加密是保障数据安全的重要手段,希望读者在开发中能够认真应用。

徐师兄的博客 1906

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

springboot项目使用jasypt实现自定义配置文件内容加密

场景 项目中使用配置文件,需要对于如账号、密码等敏感信息需要加密处理.这里使用jasypt做配置文件的加解密 配置 pom.xml配置 pom.xml 如下配置,关于依赖包版本可以去http://unidal.org/nexus/#welcome查看最新下载,或找到合适自己项目的。 application.yml 配置 注意这里G0CvDz7oJn6 是参与加密的盐 jasypt: enc...

木子希的博客 4229

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java加密API实战指南:从JCA/JCE到AES-GCM与RSA签名

加密技术是保障数据安全的基石,其核心原理在于通过特定算法将明文转换为不可读的密文,确保信息的机密性、完整性和身份认证。在Java生态中,Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 构成了标准化的加密服务框架,通过可插拔的Provider机制支持AES、RSA等主流算法。掌握这套API对于构建安全的应用程序至关重要,它能有效防止数据泄露和篡改。在实际工程中,开发者常面临算法选择、密钥管理和性能优化等挑战,例如

weixin_30920597的博客 419

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

网络安全——SpringBoot配置文件明文加密

在日常开发中,项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在propertiesyml配置文件中。

是江迪呀 的博客 4756

STM32F407中文手册

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

yml明文信息加密

最近在忙着解决规约扫描的问题,其一就是这个明文密码必须加密的问题,一般是数据库的配置。首先我用的是默认的默认的MD5加密方式,弄好之后有要求使用AES_256/SM2/SM4等高级的算法加密,于是后来又升级了jar包使用默认的JDK版本-1.8。

幻化成风 1万+

Springboot 隐私数据脱敏的最佳实践(原理+源码)

这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小。说起这个我是比较有感触的,之前的经历,到现在想起来心里还难受,我也是把数据库账号明文密码误提交到GitHub,然后被哪个大宝贝给我测试库删了,后边我长记性了把配置文件内容都加密了,数据安全问题真的不容小觑,不管工作汇还是生活,敏感数据一定要做脱敏处理。如果对脱敏概念不熟悉,可以看一下我之前写过的一篇。

程序员高级码农的博客 1294

授权环境下的密码恢复:从哈希破解到安全工程实践

哈希(Hash)是一种将任意长度数据映射为固定长度摘要的单向加密函数,其不可逆特性是密码存储的基石。其核心原理在于通过哈希算法(如MD5、SHA-256、bcrypt)将密码转换为唯一字符串,系统仅存储哈希值而非明文密码。这项技术的核心价值在于,即使数据库泄露,攻击者也难以逆向获取原始密码,从而保障认证安全。在实际应用场景中,系统管理员或开发者在授权环境下,常需对自有系统进行密码强度审计或故障恢复,例如分析遗留系统的用户密码哈希或恢复加密的配置文件。此时,掌握密码恢复技术成为高级运维与安全工程师的必备素养。

weixin_34405557的博客 429

Spring Boot动态数据源RSA配置加密实战:从原理到安全部署

在微服务架构中,数据安全是核心议题,尤其是数据库连接信息这类敏感配置。非对称加密算法RSA通过公钥加密、私钥解密的机制,为配置安全提供了优雅的解决方案。其技术价值在于实现了密钥分离,公钥可公开用于加密,而私钥被严格保护,即使代码和加密配置泄露,没有私钥也无法还原明文,极大提升了系统的整体安全性。这一机制特别适用于配置中心与应用程序分离、或配置需随代码分发的场景。本文聚焦于在Spring Boot项目中,为广泛使用的Dynamic-Datasource动态数据源框架实施RSA加密。针对开发者常遇到的`rsa

weixin_33831673的博客 475
上一篇: log4j2升级为logback,logback+slf4jcommons-logging+Jboss-logging(SSH项目)
下一篇: 实现 logback + kafka + ELK 的SSH项目日志改造
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值