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

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,实现跨服务的通信和同步更新。下面我们将深入...

    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 ...

    基于spring cloud 和vue全家桶的开源电商源码

    基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的...

Global site tag (gtag.js) - Google Analytics