摘要:之前寫過一篇關(guān)于配置中心對配置內(nèi)容加密解密的介紹構(gòu)建微服務架構(gòu)分布式配置中心加密解密。在這篇文章中,存在一個問題當被加密內(nèi)容包含一些諸如這些特殊字符的時候,使用上篇文章中提到的類似這樣的命令去加密和解密的時候,會發(fā)現(xiàn)特殊字符丟失的情況。
之前寫過一篇關(guān)于配置中心對配置內(nèi)容加密解密的介紹:《Spring Cloud構(gòu)建微服務架構(gòu):分布式配置中心(加密解密)》。在這篇文章中,存在一個問題:當被加密內(nèi)容包含一些諸如=、+這些特殊字符的時候,使用上篇文章中提到的類似這樣的命令curl localhost:7001/encrypt -d去加密和解密的時候,會發(fā)現(xiàn)特殊字符丟失的情況。
比如下面這樣的情況:
$ curl localhost:7001/encrypt -d eF34+5edo= a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427 $ curl localhost:7001/decrypt -d a34c76c4ddab706fbcae0848639a8e0ed9d612b0035030542c98997e084a7427 eF34 5edo
可以看到,經(jīng)過加密解密之后,又一些特殊字符丟失了。由于之前在這里也小坑了一下,所以抽空寫出來分享一下,給遇到同樣問題的朋友,希望對您有幫助。
問題原因與處理方法其實關(guān)于這個問題的原因在官方文檔中是有具體說明的,只能怪自己太過粗心了,具體如下:
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基礎教程
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69501.html
摘要:,這是標記配置文件集版本化的服務器端特性。要配置對稱密鑰,需要將設置為秘密字符串或使用環(huán)境變量將其排除在純文本配置文件之外。 Spring Cloud Config Server Spring Cloud Config Server為外部配置提供基于HTTP資源的API(名稱—值對或等效的YAML內(nèi)容),通過使用@EnableConfigServer注解,服務器可嵌入Spring Bo...
摘要:它們的優(yōu)先級低于或以及作為創(chuàng)建應用程序過程的正常部分添加到子級的任何其他屬性源。為引導配置類使用單獨的包名稱,并確保或注解的配置類尚未涵蓋該名稱。在這種情況下,它會在刷新時重建,并重新注入其依賴項,此時,它們將從刷新的重新初始化。 Spring Cloud Context:應用程序上下文服務 Spring Boot有一個關(guān)于如何使用Spring構(gòu)建應用程序的主見,例如,它具有通用配置文...
摘要:從配置獲取的配置默認是明文的,有些像數(shù)據(jù)源這樣的配置需要加密的話,需要對配置中心進行加密處理。添加加密配置中心配置文件中加入加密密鑰。 從配置獲取的配置默認是明文的,有些像數(shù)據(jù)源這樣的配置需要加密的話,需要對配置中心進行加密處理。 下面使用對稱性加密來加密配置,需要配置一個密鑰,當然也可以使用RSA非對稱性加密,但對稱加密比較方便也夠用了,這里就以對稱加密來配置即可。 1、安裝JCE ...
摘要:相比之前的變化內(nèi)置加密算法,可以配置不同的加密不再綁定,通過配置即可使用加解密框架也可以支持支持用戶自定義加密算法地址示例代碼沒有發(fā)布到中央倉庫,只發(fā)布到這個倉庫,大家也可以自行下載源碼打包傳到自己公司的私服上。 之前有寫過一篇加密的文章《前后端API交互如何保證數(shù)據(jù)安全性》。主要是在Spring Boot中如何對接口的數(shù)據(jù)進行自動加解密操作,通過注解的方式來指定是否需要加解密。 原理...
摘要:是什么官方是這樣描述的翻譯之后為提供了命令行功能。您還可以輕松地執(zhí)行加密和解密等操作,以支持具有機密配置值的配置客戶機。可用于從命令行運行,等常用服務。列出您可以執(zhí)行的可用服務,并僅啟動一組默認服務。 導讀 在日常開發(fā)與測試中有一些Spring Cloud 的相關(guān)的組件如 eureka、configserver、zipkin、hystrixdashboard等相對來說不容易發(fā)生變動,這...
閱讀 1199·2021-11-15 18:00
閱讀 1795·2021-10-08 10:15
閱讀 760·2021-09-04 16:48
閱讀 2382·2021-09-04 16:48
閱讀 1318·2019-08-29 18:40
閱讀 971·2019-08-29 13:08
閱讀 2992·2019-08-26 14:06
閱讀 1115·2019-08-26 13:35