加解密支持
Spring Cloud内置了加解密的支持,包括对称加密和非对称加密。使用对称加密只需要在bootstrap.yml文件中通过encrypt.key
属性指定加密用的密钥。
encrypt:
key: ABC
这样Spring Cloud就会自动创建一个org.springframework.security.crypto.encrypt.TextEncryptor
类型的bean。TextEncryptor可以用来进行加密和解密。
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TextEncryptorTest {
@Autowired
private TextEncryptor textEncryptor;
@Test
public void test() {
for (int i=0; i<10; i++) {
String plainText = "ABCDEFG";
String encryptedText = this.textEncryptor.encrypt(plainText);
String decryptedText = this.textEncryptor.decrypt(encryptedText);
System.out.println(plainText + "----------" + encryptedText + "-----------" + decryptedText);
}
}
}
如果你运行上面的代码你会发现TextEncryptor对相同的文本加密10次后的结果每次加密后的结果都是不一样的,但是它们解密后的结果都是一样的。这是因为底层使用的AES加密算法是AES/CBC/PKCS5Padding
,其使用的IV值每次都是重新随机生成的,这样的话由于每次使用的都是不同的IV值,所以出来的加密结果也是不一样的。详情可以参考org.springframework.cloud.bootstrap.encrypt.EncryptionBootstrapConfiguration
源码。
Spring Cloud也内置了对非对称加解密的支持。底层使用的是RSA算法,这需要我们基于RSA算法生成一个非对称加密的密钥,然后把它存到一个KeyStore中。然后在bootstrap.yml中通过如下方式指定KeyStore的相关信息。
encrypt:
key-store:
location: server.jks
alias: testkey
password: 123456
secret: key123456
然后Spring Cloud会自动创建一个基于RSA算法的TextEncryptor实现,RsaSecretEncryptor。RsaSecretEncryptor将使用KeyStore里面存储的密钥对的公钥进行加密,使用私钥进行解密。它加密的内容会先通过随机生成的密钥使用AES算法进行一次加密,再把AES加密用的密钥长度、密钥和加密后的密文一起经过公钥加密。这样也可以达到同样的内容每次经过加密后的结果都是不一样的。在进行解密的时候只要进行反向操作即可拿到明文了。详情可参考RsaSecretEncryptor的源码。
当同时指定了
encrypt.key
和encrypt.keyStore.xxx
相关信息时,Spring Cloud将优先创建基于RSA的TextEncryptor。
相关推荐
最简单的 SpringCloud 教程—— 服务的注册与发现(Eureka) 1.创建服务注册中心 (Eureka Server) 2.创建一个服务提供者 (Eureka Client)
SpringCloud——分布式配置中心(Spring Cloud Config)之高可用的分布式配置中心
SpringCloud——消息总线(Bus)之Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。
SpringCloud——分布式跟踪(Sleuth)之Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案。
SpringCloud——断路器(Hystrix)之Ribbon使用断路器和Feign使用断路器
SpringCloud——路由器和过滤器(Zuul)之微服务网关的实现
SpringCloud——服务注册(consul)之Consul通过HTTP API和DNS提供服务发现服务。
Zookeeper作为注册中心搭建SpringCloud实现服务注册及发现
SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点或者说技能点且都有对应的博客介绍,代码开箱即用适合新手学习或老司机复习。 SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点...
基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的...
spring boot , spring cloud alibaba, spring cloub 版本选型
Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注...
Spring Cloud 提供完全的微服务技术体系,可以帮护开发者快速实现架构升级。SpringCloud 是目前最火热的构建微服务体系的解决方案。
基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的...
SpringCloud Conf 搭建配置中心二加密和解密对称加解密非对称加解密对称加解密Spring Cloud可以在本地进行预处理的解密,需要在JVM添加J
简单的spring cloud项目,适合新手学习使用
一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...
课程的源码是尚硅谷的springcloud教程源码,SpringCloud各种核心组件,到最终的微服务架构总结,帮助大家快速入门、上手并精通微服务框架SpringCloud。 课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud...