在使用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)