Spring Cloud Config對特殊字符加密處理的方法詳解
前言
之前寫過一篇關于配置中心對配置內容加密解密的介紹:《Spring Cloud構建微服務架構:分布式配置中心(加密解密) 》。在這篇文章中,存在一個問題:當被加密內容包含一些諸如=、+這些特殊字符的時候,使用上篇文章中提到的類似這樣的命令curl localhost:7001/encrypt -d
去加密和解密的時候,會發(fā)現特殊字符丟失的情況。
比如下面這樣的情況:
$ 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一個項目多個模塊聚合打包問題解決方案(最新推薦)
最近遇到個需求,針對后端解耦模塊較多的項目,想在云端啟動時簡潔些只啟動一個jar文件的情景,本文重點給大家介紹spring一個項目多個模塊聚合打包問題解決方案,感興趣的朋友一起看看吧2023-09-09Java對日期Date類進行加減運算、年份加減月份加減、時間差等等
這篇文章主要介紹了Java對日期Date類進行加減運算、年份加減月份加減、時間差等等,在網上查閱資料,加上自己總結的一些關于Date類的工具類2017-01-01java 集合并發(fā)操作出現的異常ConcurrentModificationException
Map在遍歷時候通常 現獲得其鍵值的集合Set,然后用迭代器Iterator來對Map進行遍歷。2009-06-06SpringBoot參數校驗之@Validated的使用詳解
這篇文章主要通過示例為大家詳細介紹一下介紹了SpringBoot參數校驗中@Validated的使用方法,文中的示例代碼講解詳細,需要的可以參考一下2022-06-06Kotlin-Coroutines中的async與await異步協(xié)程管理
這篇文章主要為大家介紹了Kotlin-Coroutines中的async與await異步協(xié)程管理,提升程序性能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10WebSocket+Vue+SpringBoot實現語音通話的使用示例
本文主要介紹了WebSocket+Vue+SpringBoot實現語音通話的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11