资讯专栏INFORMATION COLUMN

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

wslongchen / 1177人阅读

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

之前写过一篇关于配置中心对配置内容加密解密的介绍:《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();
}

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

Spring Boot基础教程

Spring Cloud基础教程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69501.html

相关文章

  • Spring Cloud 参考文档(Spring Cloud Config Server)

    摘要:,这是标记配置文件集版本化的服务器端特性。要配置对称密钥,需要将设置为秘密字符串或使用环境变量将其排除在纯文本配置文件之外。 Spring Cloud Config Server Spring Cloud Config Server为外部配置提供基于HTTP资源的API(名称—值对或等效的YAML内容),通过使用@EnableConfigServer注解,服务器可嵌入Spring Bo...

    harryhappy 评论0 收藏0
  • Spring Cloud 参考文档(Spring Cloud Context:应用程序上下文服务)

    摘要:它们的优先级低于或以及作为创建应用程序过程的正常部分添加到子级的任何其他属性源。为引导配置类使用单独的包名称,并确保或注解的配置类尚未涵盖该名称。在这种情况下,它会在刷新时重建,并重新注入其依赖项,此时,它们将从刷新的重新初始化。 Spring Cloud Context:应用程序上下文服务 Spring Boot有一个关于如何使用Spring构建应用程序的主见,例如,它具有通用配置文...

    魏明 评论0 收藏0
  • Spring Cloud 配置中心内容加密

    摘要:从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理。添加加密配置中心配置文件中加入加密密钥。 从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理。 下面使用对称性加密来加密配置,需要配置一个密钥,当然也可以使用RSA非对称性加密,但对称加密比较方便也够用了,这里就以对称加密来配置即可。 1、安装JCE ...

    williamwen1986 评论0 收藏0
  • API数据加密框架monkey-api-encrypt

    摘要:相比之前的变化内置加密算法,可以配置不同的加密不再绑定,通过配置即可使用加解密框架也可以支持支持用户自定义加密算法地址示例代码没有发布到中央仓库,只发布到这个仓库,大家也可以自行下载源码打包传到自己公司的私服上。 之前有写过一篇加密的文章《前后端API交互如何保证数据安全性》。主要是在Spring Boot中如何对接口的数据进行自动加解密操作,通过注解的方式来指定是否需要加解密。 原理...

    BetaRabbit 评论0 收藏0
  • Spring Boot Cloud CLI - 快速上手

    摘要:是什么官方是这样描述的翻译之后为提供了命令行功能。您还可以轻松地执行加密和解密等操作,以支持具有机密配置值的配置客户机。可用于从命令行运行,等常用服务。列出您可以执行的可用服务,并仅启动一组默认服务。 导读 在日常开发与测试中有一些Spring Cloud 的相关的组件如 eureka、configserver、zipkin、hystrixdashboard等相对来说不容易发生变动,这...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<