在使用Spring Cloud Config的加密解密功能时,有一个必要的前提需要我们注意。为了启用该功能,我们需要在配置中心的运行环境中安装不限长度的JCE版本(Unlimited Strength Java Cryptography Extension)。虽然,JCE功能在JRE中自带,但是默认使用的是有长度限制的版本。我们可以从Oracle的官方网站中下载到它,它是一个压缩包,解压后可以看到下面三个文件:
jdk8对应的下载链接: jdk8的jce下载地址 ,然后放在jdk的jre的security目录下即可。

可以尝试用postman或者浏览器通过GET请求访 http://localhost:8000/encrypt/status 端点,我们将得到如下内容:

"description": "The encryption algorithm is not strong enough", "status": "INVALID"

该返回说明当前配置中心的加密功能还不能使用,因为没有为加密服务配置对应的密钥。

对称加解密

bootstrap.yml配置:

encrypt:
  key: xiefei

加入上述配置信息后,重启配置中心,再访问 http://localhost:8000/encrypt/status 端点,我们将得到如下内容:

"status": "OK"

此时,我们配置中心的加密解密功能就已经可以使用了

我们可以用 /encrypt 端点加密 /decrypt 端点解密,注意,这两个端点都是POST请求:

在yml文件中,必须以英文半角单引号括起来加密值,前面加{cipher}

server:
  port: '{cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1'

在properties文件中, 不要加引号

port={cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1

我们通过配置encrypt.key参数来指定密钥的实现方式采用了对称性加密。这种方式实现比较简单,只需要配置一个参数即可。

非对称加解密

1.使用keytool生产证书

keytool -genkeypair 命令帮助

  -alias <alias>                  要处理的条目的别名
  -keyalg <keyalg>                密钥算法名称
  -keysize <keysize>              密钥位大小
  -sigalg <sigalg>                签名算法名称
  -destalias <destalias>          目标别名
  -dname <dname>                  唯一判别名
  -startdate <startdate>          证书有效期开始日期/时间
  -ext <value>                    X.509 扩展
  -validity <valDays>             有效天数
  -keypass <arg>                  密钥口令
  -keystore <keystore>            密钥库名称
  -storepass <arg>                密钥库口令
  -storetype <storetype>          密钥库类型
  -providername <providername>    提供方名称
  -providerclass <providerclass>  提供方类名
  -providerarg <arg>              提供方参数
  -providerpath <pathlist>        提供方类路径
  -v                              详细输出
  -protected                      通过受保护的机制的口令

2.使用keytool生成证书

keytool -genkeypair -alias testkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass secret1 -keystore server.jks -storepass password1

3.将生产的证书server.jks 放到resource下

4.在server端的bootstrap.xml添加配置

#非对称加密
encrypt:
  key-store:
    location: classpath:/server.jks
    password: password1 #生成时填写的
    alias: testkey  #生成时填写的
    secret: secret1 #生成时填写的

5.配置文件中配置信息加密,同对称加密的配置方式一致

python中的集合运算符 python中的集合符号

第十章:【集合】“集合!”是我们上学军训时最不想听到的口号,同时“集合”也是我们学习数学中的小噩梦;它,既可以是动词,也可以是名词,更是python中不可或缺的“数据类型”。到本章为止,我们已经讲过很多“数据类型”了,那么不妨我们来对几个“数据类型”的“封装符号”来复习一下:#字符串: str1 = "123" str2 = '123' list1 = [1,2,3]

python zhushu python注水游戏f注小

编写Python程序,实现一个小游戏。 共有三个水桶,容量分别是8升、5升和3升,玩家可对每个水桶做如下操作: 按F或(f)键注满一个桶 按E或(e)键清空一个桶 按P或(p)键从一个桶向另一个桶倒水 按Q或(q)键退出游戏 当玩家使得任意一个水桶的水量是4升时,则玩家获胜,程序显示玩家操作的总步数并停止游戏。# -*- coding: utf-8 -*- class Bucket:

python加密解密模块 python加密和解密

python简单的加密和解密简单的通过random库进行异或加密代码如下(示例):import random def main(): choice=input() if choice=="1": str1=input("请输入要加密的文字:") key=input("请输入秘钥:") str2=encode(str1,key)