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

Posted elim168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于Spring Cloud(03)——内置加解密支持的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud - Spring Cloud 之 Config分布式配置;加解密;配置信息局部刷新;Spring Cloud Bus+RabbitMQ全局刷新(十六)

Spring Cloud 系列之 Config 配置中心

Spring Cloud 系列之 Config 配置中心

Spring Cloud Gateway 3 内置Filter

Spring Cloud 学习——5.使用 feign 的 hystrix 支持

openEuler 21.03 特性解读 | 毕昇 JDK8 支持鲲鹏硬件加解密特性详解和使用介绍