之前写过一篇关于配置中心对配置内容加密解密的介绍:《Spring Cloud构建微服务架构:分布式配置中心(加密解密)》。在这篇文章中,存在一个问题:当被加密内容包含一些诸如 =、 +这些特殊字符的时候,使用上篇文章中提到的类似这样的命令 curl localhost:7001/encrypt-d去加密和解密的时候,会发现特殊字符丢失的情况。

比如下面这样的情况:

  1. $ curl localhost:7001/encrypt -d eF34+5edo=

  2. a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427

  3. $ curl localhost:7001/decrypt -d a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427

  4. eF34 5edo

可以看到,经过加密解密之后,又一些特殊字符丢失了。由于之前在这里也小坑了一下,所以抽空写出来分享一下,给遇到同样问题的朋友,希望对您有帮助。

问题原因与处理方法

其实关于这个问题的原因在官方文档中是有具体说明的,只能怪自己太过粗心了,具体如下:

If you are testing like this with curl, then use --data-urlencode (instead of -d) or set an explicit Content-Type:text/plain to make sure curl encodes the data correctly when there are special characters ('+' is particularly tricky).

所以,在使用 curl的时候,正确的姿势应该是:

  1. $ curl localhost:7001/encrypt -H 'Content-Type:text/plain' --data-urlencode "eF34+5edo="

  2. 335e618a02a0ff3dc1377321885f484fb2c19a499423ee7776755b875997b033

  3. $ curl localhost:7001/decrypt -H 'Content-Type:text/plain' --data-urlencode "335e618a02a0ff3dc1377321885f484fb2c19a499423ee7776755b875997b033"

  4. eF34+5edo=

那么,如果我们自己写工具来加密解密的时候怎么玩呢?下面举个 OkHttp的例子,以供参考:

  1. private String encrypt(String value) {

  2.    String url = "http://localhost:7001/encrypt";

  3.    Request request = new Request.Builder()

  4.            .url(url)

  5.            .post(RequestBody.create(MediaType.parse("text/plain"), value.getBytes()))

  6.            .build();

  7.    Call call = okHttpClient.newCall(request);

  8.    Response response = call.execute();

  9.    ResponseBody responseBody = response.body();

  10.    return responseBody.string();

  11. }

  12. private String decrypt(String value) {

  13.    String url = "http://localhost:7001/decrypt";

  14.    Request request = new Request.Builder()

  15.            .url(url)

  16.            .post(RequestBody.create(MediaType.parse("text/plain"), value.getBytes()))

  17.            .build();

  18.    Call call = okHttpClient.newCall(request);

  19.    Response response = call.execute();

  20.    ResponseBody responseBody = response.body();

  21.    return responseBody.string();

  22. }

== 厉害了,Python竟然还可以这么玩儿......(内含福利)==

热文推荐

主流Java数据库连接池比较及前瞻

JDK 1.5 - 1.8 各版本的新特性总结

Spring Boot快速开发利器:Spring Boot CLI

IntelliJ IDEA 2018.1正式发布!还能这么玩?

消息中间件选型分析

自建API网关「架构设计篇」

其他推荐

Spring Boot/Cloud干货汇总

Spring Boot使用@Async实现异步调用:线程池的优雅关闭

Spring Boot使用@Async实现异步调用:自定义线程池

Spring Boot 2.0正式发布,升还是不升呢?

Spring Boot 2.0 新特性概览

长按指纹

一键关注

深入交流、更多福利

扫码加入我的知识星球


点击 “阅读原文” 看看本号其他精彩内容

Spring Cloud Config对特殊字符加密的处理相关推荐

  1. Spring Cloud Config 配置的加密解密

    配置内容的加密解密 很多场景下很多场景下,对于某些敏感的配置内容,例如数据库账号密码等应当加密存储.Config Server为配置内容的加密与解密提供了支持. 安装JCE Config Server ...

  2. Spring Cloud Config采用数据库存储配置内容

    在之前的<Spring Cloud构建微服务架构:分布式配置中心>一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储.这一设计巧妙的利用Gi ...

  3. 使用对称加密来加密Spring Cloud Config配置文件

    补充 使用Spring Cloud Config加密功能需要下载JCE扩展,用于生成无限长度的密文.链接:http://www.oracle.com/technetwork/java/javase/d ...

  4. 分布式配置中心:spring cloud config

    分布式配置中心:spring cloud config 前言 ​ Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集 ...

  5. Spring Cloud Config服务端配置细节(二)之加密解密

    在微服务架构中,由于独立的服务个数众多,加上前期测试工作量大,一些原本由运维人员维护的敏感信息会被我们直接写在微服务中,以提高开发效率,但是这种明文存储方式显然是非常危险的,所以我们要对这些信息进行加 ...

  6. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

  7. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...

  8. 为Spring Cloud Config插上管理的翅膀

    最近一致在更新Spring Cloud Config的相关内容,主要也是为这篇埋个伏笔,相信不少调研过Spring Cloud Config的用户都会吐槽它的管理能力太弱.因此,就有了下面为讲推荐的这 ...

  9. Spring cloud config 分布式配置中心(一) 服务端

    作用: 为分布式系统中的基础设施和微服务应用提供外部集中化的配置支持,分客户端和服务端 服务端: 即分布式配置中心,是一个独立的微服务应用,连接配置仓库,为客户端提供一些访问接口,如加密 / 解密信息 ...

最新文章

  1. wordpressPHP实现ajax评论,wordpress无刷新评论:无需插件ajax实现wordpress comment无刷新机制...
  2. matlab fsolve()函数的使用
  3. iOS攻防——(四)class-dump-与-Dumpdecrypted-使用
  4. python 数据库
  5. 【jq】c#零基础学习之路(1)Hello World!
  6. “睡服”面试官系列第六篇之set数据结构(建议收藏学习)
  7. mysql update 多个字段_MySQL数据库基础
  8. table中加表单元素怎么验证_045、DOM编程实例和表单
  9. 阿里影业宣布新战略:“新基础设施”赋能电影产业
  10. 用树莓派3B+实现智能语音识别
  11. 3.9 使用标尺工具拉直倾斜的图片 [Ps教程]
  12. 疟疾识别图像数据集(27000张图像,2类图像)
  13. 【转载】UWP应用设置和文件设置:科普
  14. 史上最强的融资方案商业计划书
  15. 还有比元宇宙更牛的商业模式吗?
  16. 【Bioinfo Blog 011】【R Code 008】——功能富集分析
  17. WPF触控程序开发(三)——类似IPhone相册的反弹效果
  18. grafana登录密码重置
  19. LCD段码液晶屏开模过程参数
  20. 源码编译安装php-7.4.8

热门文章

  1. centos7 配置国内yum源和epel源
  2. golang 变量定义和初始化
  3. java设计模式---合成模式
  4. Linux Shell -- 无网不利
  5. AWS之EC2实例搭建LAMP服务器
  6. 点在平面上的投影坐标例题_光测力学-栅线投影(面结构光)技术
  7. android汽车之家顶部滑动菜单,Android自定义控件之仿汽车之家下拉刷新
  8. qq传java文件_java学习:基于TCP的网络文件传输(可改写的QQ文件传输)
  9. 计算机上没有找到服务was,win10系统搭建网站提示计算机“.”上没有找到wAs服务的步骤介绍...
  10. bom表_MicroProfile 2.2 BOM导入支持