`
234390216
  • 浏览: 10233459 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462658
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775555
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398395
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395028
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679999
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530905
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184013
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467977
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151405
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68164
社区版块
存档分类
最新评论

Spring Cloud(03)——内置加解密支持

阅读更多

加解密支持

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.keyencrypt.keyStore.xxx相关信息时,Spring Cloud将优先创建基于RSA的TextEncryptor。

0
0
分享到:
评论

相关推荐

    SpringCloud——分布式配置中心(Spring Cloud Config)

    Spring Cloud Config 可以与 Spring Security 集成,对配置进行加密和解密。同时,可以限制哪些用户或服务有权访问配置信息。 **七、高可用配置中心** 为了提高配置中心的可用性,我们可以部署多个 Config Server ...

    最简单的 SpringCloud 教程——服务的注册与发现(Eureka)

    在本教程中,我们将深入探讨SpringCloud的核心组件之一——Eureka,它是一个服务注册与发现的工具,使得微服务架构中的各个服务能够互相找到并进行通信。我们将通过两个主要步骤来学习如何使用Eureka:创建服务注册...

    spring cloud 体系版本选型,涉及spring cloud alibaba spring boot spring cloud

    在构建基于Spring Cloud的微服务架构时,版本选型是一个至关重要的步骤,它直接影响到系统的稳定性和可维护性。Spring Cloud作为一个广泛使用的微服务框架,其版本迭代迅速,每个版本都有其特定的功能特性和生命周期...

    Spring Cloud实战 _springcloud实战_springcloud_

    Spring Cloud基于Spring Boot的便利性,为开发者提供了全面的微服务开发支持,包括服务发现、配置中心、负载均衡、熔断机制等众多功能,使得开发人员能够快速构建出健壮的分布式系统。 首先,我们要理解Spring ...

    SpringCloud——Zookeeper(注册中心)

    在分布式系统中,服务注册与发现是至关重要的一个环节,SpringCloud通过集成不同的注册中心,如Eureka、Consul和Zookeeper,为微服务架构提供了强大的支持。本篇主要聚焦于SpringCloud与Zookeeper的结合,讲解如何...

    SpringCloud——消息总线(Bus)

    在微服务架构中,Spring Cloud Bus 是一个非常重要的组件,它起到了消息总线的作用,能够有效地连接各个微服务节点,并且结合轻量级的消息代理,如 RabbitMQ 或 Kafka,实现跨服务的通信和同步更新。下面我们将深入...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    5. **Spring Cloud Config**: 这是一个配置服务器和客户端的集合,允许你在开发过程中集中管理和推送配置,支持 Git 存储和服务器端的实时刷新。 6. **Spring Cloud Bus**: 控制总线,用于广播事件到所有的服务实例...

    SpringCloud——服务注册(consul)

    Spring Cloud作为微服务解决方案的一部分,提供了多种服务发现工具,其中Consul是其中一个流行的选择。本文将深入探讨Spring Cloud如何整合Consul实现服务注册。 Consul是由HashiCorp公司开发的一款分布式系统服务...

    SpringCloud中文文档

    Spring Cloud中文文档 Spring Cloud 是一个用于快速构建分布式系统的工具集,提供了配置管理、服务发现、断路器、智能路由、微代理、控制总线等多种功能。这些功能可以帮助开发人员快速地支持实现分布式系统中的...

    方志朋版——深入理解Spring Cloud与微服务构建.pdf

    其次,书中会详细介绍Spring Cloud Config,这是一个集中式配置管理平台,支持配置的实时更新,使得微服务在运行时无需重启就能获取最新的配置信息。另外,Spring Cloud Bus可以用来广播配置更改,确保所有服务实例...

    SpringCloud.pdf

    Spring Cloud Context 添加了一个引导上下文,作为主应用程序上下文的父上下文,负责加载外部配置属性和解密。通过设置 `spring.cloud.bootstrap.enabled`,可以选择启用或禁用引导过程。应用程序上下文层次结构允许...

    SpringCloud——断路器(Hystrix)

    在分布式系统中,Spring Cloud Hystrix 是一个关键的组件,它作为一个断路器来防止服务雪崩。断路器模式是微服务架构中的一个重要概念,用于提高系统的容错性和稳定性。下面我们将深入探讨 Spring Cloud Hystrix 的...

    SpringCloud项目源码下载.docx

    2. **配置中心**:通过Spring Cloud Config实现外部化配置,支持配置服务器集中管理配置文件,支持客户端配置的动态刷新。 3. **负载均衡**:通过Ribbon或Feign实现客户端的负载均衡。 4. **熔断器**:通过Hystrix...

    SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点

    SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点或者说技能点且都有对应的博客介绍,代码开箱即用适合新手学习或老司机复习。 SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点...

    基于SpringCloud的快递驿站系统源码.zip

    基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的...

    springcloud视频学习

    2. SpringCloud的核心组件:如Eureka用于服务注册与发现,Zuul或 Ribbon进行客户端负载均衡,Hystrix提供断路器模式以防止服务雪崩,以及Spring Cloud Config支持配置管理等。 3. SpringCloud在国内的实际应用案例...

    spring cloud 实战教程

    接着,会介绍Spring Cloud的核心组件——Eureka,它是服务注册与发现的实现,让服务提供者和服务消费者能够自动发现彼此。通过实例,读者可以学习到如何创建和注册服务,以及如何实现服务调用。 Spring Cloud ...

    SpringCloud——路由器和过滤器(Zuul)

    SpringCloud是基于Spring Boot构建的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作中的...

    SpringCloud项目实战各组件源代码案例

    Spring Cloud系列教程 Spring Boot Spring Cloud Stream 和 Kafka案例教程 springcloud生产者与消费者项目实战案例 Spring Cloud 中断路器 Circuit Breaker的应用 配置 Spring Cloud Config Server Spring Cloud ...

Global site tag (gtag.js) - Google Analytics