精选文章 Spring Cloud Config对特殊字符加密的处理

Spring Cloud Config对特殊字符加密的处理

作者:weixin_34072159 时间: 2018-05-06 09:21:00
weixin_34072159 2018-05-06 09:21:00

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

比如下面这样的情况:

$ curl localhost:7001/encrypt -d eF34+5edo=
a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427
$ curl localhost:7001/decrypt -d a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427
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的时候,正确的姿势应该是:

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

$ curl localhost:7001/decrypt -H 'Content-Type:text/plain' --data-urlencode "335e618a02a0ff3dc1377321885f484fb2c19a499423ee7776755b875997b033"
eF34+5edo=

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

private String encrypt(String value) {
    String url = "http://localhost:7001/encrypt";
    Request request = new Request.Builder()
            .url(url)
            .post(RequestBody.create(MediaType.parse("text/plain"), value.getBytes()))
            .build();

    Call call = okHttpClient.newCall(request);
    Response response = call.execute();
    ResponseBody responseBody = response.body();
    return responseBody.string();
}

private String decrypt(String value) {
    String url = "http://localhost:7001/decrypt";
    Request request = new Request.Builder()
            .url(url)
            .post(RequestBody.create(MediaType.parse("text/plain"), value.getBytes()))
            .build();

    Call call = okHttpClient.newCall(request);
    Response response = call.execute();
    ResponseBody responseBody = response.body();
    return responseBody.string();
}

以下专题教程也许您会有兴趣

转载于:https://my.oschina.net/didispace/blog/1807876

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:一张图读懂JVM

下一篇:第二次c++作业

您可能感兴趣

  • Istio架构剖析 | 文末有福利

    Istio是一个开源的服务网格,可为分布式微服务架构提供所需的基础运行和管理要素。随着各组织越来越多地采用云平台,开发者必须使用微服务设计架构以实现可移植性,而运维人员必须管理包含混合云部署和多云部署的大型分布式应用。Istio采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性。 从架构设计上来看,Istio服务网格在逻辑上分为控制平面和数据平面两部分。其中,控制平面P...

  • Spring boot启动原理解析

    作者:平凡希 链接:https://www.cnblogs.com/xiaoxi/p/7999885.html 我们开发任何一个Spring Boot项目,都会用到如下的启动类 @SpringBootApplication public class Application {     public static void main(String[] args) {         Sprin...

  • Spring 安全性:深入认证和授权

    介绍 每个人迟早都需要为他的项目增加安全性,在Spring生态系统中,您可以借助Spring Security库来做到这一点。 因此,当您继续将Spring Security添加到您的Spring Boot(或普通Spring)项目中,然后突然...

  • 深入Python 验证码解析

    介绍 在Python的实战中爬虫承担相当重要的角色,而验证码识别则是爬虫中一个重点。验证码是一个网站项目的守卫,如果不能通过验证码识别,那后期的爬虫则无法进行。本文详细介绍Python验证码识别的具体细节。郑重声明:仅讨论技术,不能用于违法手段,如若不然则受法律严惩且与作者无关。 准备工作——验证码解析环境搭建 安装Tesseract Tesserocr 是 Python 的一个 OCR 识...

  • 面试刷题11-15

    【用友】一面(8.22)(电话)复盘(24min) 自我介绍 当前在校情况 项目情况 设计模式 IO相关 socket、tomcat、Netty、dubbo MySQl 引擎之间的区别,索引原理 redis缓存 ES 搜索引擎 性能监控的日志 线程安全 AOP 泛型 作用、原理 【用友】HR面(8.27)(视频)复盘(17min) 自我介绍 项目情况 职业规划 经受过最大的挫折,怎么克服的 ...

  • 【springCloud基础篇-9】Spring Cloud Config 配置中心之服务端搭建及讲解和多种搭建方式

    demo代码地址:https://download.csdn.net/download/qq_33333654/12014918 环境: jdk1.8 maven3.0 idea springboot1.5.3 首先需要启动自己的注册中心,具体可参考我之前的注册中心高可用博客: https://blog.csdn.net/qq_33333654/article/details/1026363...

  • 认识微服务

    0.学习目标 了解系统架构的演变 了解RPC与Http的区别 掌握HttpClient的简单使用 知道什么是SpringCloud 独立搭建Eureka注册中心 独立配置Robbin负载均衡 -Xms128m -Xmx128m 1.系统架构演变 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式...

  • 3万字通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包括:CLS、CTS(CLI)、FCL、Windows下CLR的相关核心组成、Windows下托管程序运行...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。