要使用加密和解密功能,您需要在 JVM 中安装全强度 JCE(默认情况下不包括它)。 您可以从 Oracle 下载“Java 加密扩展 (JCE) 无限强度管辖策略文件”,并按照安装说明进行操作(实质上,您需要将 JRE lib/security 目录中的两个策略文件替换为您下载的策略文件)。
要使用加密和解密功能,您需要在 JVM 中安装全强度 JCE(默认情况下不包括它)。 您可以从 Oracle 下载“Java 加密扩展 (JCE) 无限强度管辖策略文件”,并按照安装说明进行操作(实质上,您需要将 JRE lib/security 目录中的两个策略文件替换为您下载的策略文件)。

如果远程属性源包含加密内容(值以 开头),则在通过 HTTP 发送到客户端之前对其进行解密。 此设置的主要优点是,当属性值处于“静态”状态时(例如,在 git 存储库中),它们不需要是纯文本的。 如果无法解密某个值,则会从属性源中删除该值,并添加一个具有相同键但以 和 为前缀的值的其他属性,该值表示“不适用”(通常)。 这主要是为了防止密文被用作密码并意外泄露。{cipher}invalid<n/a>Spring中文文档

如果为配置客户端应用程序设置远程配置存储库,它可能包含类似于以下内容的内容:application.ymlSpring中文文档

application.yml
spring:
  datasource:
    username: dbuser
    password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'

文件中的加密值不得用引号括起来。否则,不会解密该值。以下示例显示了有效的值:application.propertiesSpring中文文档

application.properties
spring.datasource.username: dbuser
spring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ

您可以安全地将此纯文本推送到共享的 git 存储库,并且机密密码仍然受到保护。Spring中文文档

服务器还公开和终结点(假设这些端点是安全的,并且仅由授权代理访问)。 如果编辑远程配置文件,则可以使用 Config Server 通过 POST 到终结点来加密值,如以下示例所示:/encrypt/decrypt/encryptSpring中文文档

$ curl localhost:8888/encrypt -s -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
如果使用 curl 进行测试,则使用 (而不是 ) 并在要加密的值前缀(curl 需要这样做)或设置显式以确保 curl 在有特殊字符时正确编码数据(“+”特别棘手)。--data-urlencode-d=Content-Type: text/plain
如果使用 curl 进行测试,则使用 (而不是 ) 并在要加密的值前缀(curl 需要这样做)或设置显式以确保 curl 在有特殊字符时正确编码数据(“+”特别棘手)。--data-urlencode-d=Content-Type: text/plain
请确保不要在加密值中包含任何 curl 命令统计信息,这就是示例使用该选项使它们静音的原因。将值输出到文件有助于避免此问题。-s
请确保不要在加密值中包含任何 curl 命令统计信息,这就是示例使用该选项使它们静音的原因。将值输出到文件有助于避免此问题。-s

逆向操作也可通过(前提是服务器是 配置了对称密钥或完整密钥对),如以下示例所示:/decryptSpring中文文档

$ curl localhost:8888/decrypt -s -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

在将加密值放入 YAML 或属性文件之前,以及在提交并将其推送到远程(可能不安全)存储之前,获取加密值并添加前缀。{cipher}Spring中文文档

和 端点也都接受 形式的路径,当客户端调用主环境资源时,这些路径可用于控制每个应用程序(名称)和每个配置文件的加密。/encrypt/decrypt/*/{application}/{profiles}Spring中文文档

若要以这种精细方式控制加密,还必须提供 of 类型,用于为每个名称和配置文件创建不同的加密器。 默认情况下提供的密钥不这样做(所有加密都使用相同的密钥)。@BeanTextEncryptorLocator
若要以这种精细方式控制加密,还必须提供 of 类型,用于为每个名称和配置文件创建不同的加密器。 默认情况下提供的密钥不这样做(所有加密都使用相同的密钥)。@BeanTextEncryptorLocator

命令行客户端(带有 Spring Cloud CLI 扩展 installed)也可用于加密和解密,如以下示例所示:springSpring中文文档

$ spring encrypt mysecret --key foo
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
$ spring decrypt --key foo 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

若要使用文件中的密钥(例如用于加密的 RSA 公钥),请在前面加上 键值为“@”,并提供文件路径,如以下示例所示:Spring中文文档

$ spring encrypt mysecret --key @${HOME}/.ssh/id_rsa.pub
AQAjPgt3eFZQXwt8tsHAVv/QHiY5sI2dRcR+...
该参数是必需的(尽管有前缀)。--key--
该参数是必需的(尽管有前缀)。--key--