springmvc 部分加密通訊
手機客戶端與後臺互動中一般會用到加密傳輸。至於不用HTTPS,本文不討論,這裡給出使用springmvc +http協議,手機客戶端加密部分資料值,後臺進行統一解密。實現思路就是使用攔截器,使用裝飾模式,可以直接使用HttpServletRequestWrapper。
springmvc後臺DES3 解密
原文和密文前後均無空格
資料
#1
原文: karl
密文:HM6LxeRjJxc=
UR編碼: HM6LxeRjJxc%3d
#2
原文: del555
密文: HNf8wVhKhsg=
UR編碼: HNf8wVhKhsg%3d
#3
原文:
在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。使用時,在傳輸編碼方式中指定base64。然後,每次取出6個bit
- 密文:
eT9O6eHyB27BKL7u4eXE49xoGZZ4aZdQ3ibZ4uKvlD8yLwCeKJi9SYijf142uufEB36d/sk6VmuOd8c8WHspd3kba490j/3+Dez03ycGzNssE4MwuNApSdyQ5BDZTLq7fkxwn+MvkIJTGiwgPcdD8xEMEWgp6/s9gENhWGGnayBfWrSv/36pBNNVhb+HkKXlwPCAazIVbFK4CrohlviiJ3lJv7/qfFlPNPUAVQYAWbGBJ7vA4osfspzMb0abw3uXSROm7KYopKu9KRe9Cgxs7w==
密文URL編碼後:
eT9O6eHyB27BKL7u4eXE49xoGZZ4aZdQ3ibZ4uKvlD8yLwCeKJi9SYijf142uufEB36d%2Fsk6VmuOd8c8WHspd3kba490j %2F3%2BDez03ycGzNssE4MwuNApSdyQ5BDZTLq7fkxwn%2BMvkIJTGiwgPcdD8xEMEWgp6%2Fs9gENhWGGnayBfWrSv%2F36pBNNVhb%2BHkKXlwPCAazIVbFK4CrohlviiJ3lJv7%2FqfFlPNPUAVQYAWbGBJ7vA4osfspzMb0abw3uXSROm7KYopKu9KRe9Cgxs7w%3D%3D
或者
- 密文RFC822格式(76個字元一行):
eT9O6eHyB27BKL7u4eXE49xoGZZ4aZdQ3ibZ4uKvlD8yLwCeKJi9SYijf142uufEB36d/sk6VmuO
d8c8WHspd3kba490j/3 +Dez03ycGzNssE4MwuNApSdyQ5BDZTLq7fkxwn+MvkIJTGiwgPcdD8xEM
EWgp6/s9gENhWGGnayBfWrSv/36pBNNVhb+HkKXlwPCAazIVbFK4CrohlviiJ3lJv7/qfFlPNPUA
VQYAWbGBJ7vA4osfspzMb0abw3uXSROm7KYopKu9KRe9Cgxs7w==
密文RFC822格式URL編碼後:
eT9O6eHyB27BKL7u4eXE49xoGZZ4aZdQ3ibZ4uKvlD8yLwCeKJi9SYijf142uufEB36d%2fsk6VmuO%0ad8c8WHspd3kba490j%2f3%2bDez03ycGzNssE4MwuNApSdyQ5BDZTLq7fkxwn%2bMvkIJTGiwgPcdD8xEM%0aEWgp6%2fs9gENhWGGnayBfWrSv%2f36pBNNVhb%2bHkKXlwPCAazIVbFK4CrohlviiJ3lJv7%2fqfFlPNPUA%0aVQYAWbGBJ7vA4osfspzMb0abw3uXSROm7KYopKu9KRe9Cgxs7w%3d%3d
測試
使用已以上資料進行測試
springmvc, phone 使用原文, 其他三個使用加密資料
@Controller
public class IndexController {
@RequestMapping("/")
@ResponseBody
Object index(String phone, String name, String password, String desc) {
System.out.println("-----------------------------------------");
System.out.println("phone:" + phone);
System.out.println("name:" + name);
System.out.println("password:" + password);
System.out.println("desc:" + desc);
return "Hello longdai!";
}
}
POST:
引數 | 值 |
---|---|
phone | 131212345678 |
name | HM6LxeRjJxc%3d |
password | HNf8wVhKhsg%3d |
desc | 這裡使用資料#3的URL編碼後的資料 |
期望結果:
-----------------------------------------
phone:131212345678
name:karl
password:del555
desc:在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。使用時,在傳輸編碼方式中指定base64。然後,每次取出6個bit
POSTMAN:
結果:
解密攔截器原始碼:
@Configuration
public class DecryptFilter extends OncePerRequestFilter {
private static Log log = LogFactory.getLog(DecryptFilter.class);
private static Pattern BASE64_PATTERN = Pattern.compile("^[a-zA-Z0-9\\+/]+[=]{0,2}$");
private static Pattern BASE64_PATTERN_RFC822 = Pattern.compile("^[a-zA-Z0-9\\+/\n]+[=]{0,2}$");
public String filter(HttpServletRequest request, String name, String input) {
String ret = input;
if (input == null || input.trim().equals("(null)")) {
return null;
}
boolean b1 = input.length()%4==0 && BASE64_PATTERN.matcher(input).matches();
boolean b2 = input.length() > 77 && input.charAt(76)=='\n' && BASE64_PATTERN_RFC822.matcher(input).matches();
if ( !b1 && !b2){
return injectSQLFilter(name, input);//not base64 text
}
try {
ret = Des3.decode(input);
} catch (Exception e) {
log.error(request.getRequestURI() + " error decode " + name + "=" + input, e);
}
return injectSQLFilter(name, ret);
}
public String injectSQLFilter(String name, String text){
if(text==null){
return null;
}
if(name.matches("password|passwd|loginPassword|dealPassword")){
return text;
}
//TODO 這裡處理SQL注入,直接處理掉注入資料,或者下層攔截器處理
return text;
}
@Override
protected void doFilterInternal(final HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
chain.doFilter(new HttpServletRequestWrapper(request) {
protected Map<String, String[]> parameters = new HashMap<String, String[]>();
@Override
public String getParameter(String name) {
if (parameters.containsKey(name)){
String[] values = parameters.get(name);
if (values!=null && values.length>0){
return values[0];
}
}
String value = super.getParameter(name);
String retValue = filter(this, name, value);
parameters.put(retValue, new String[]{retValue});
return retValue;
}
@Override
public String[] getParameterValues(String name) {
if (parameters.containsKey(name)){
String[] values = parameters.get(name);
return values;
}
String[] values = super.getParameterValues(name);
if (values == null) {
return null;
}
for (int i = 0; i < values.length; i++) {
values[i] = filter(this, name, values[i]);
}
parameters.put(name, values);
return values;
}
}, response);
}
}
相關推薦
springmvc 部分加密通訊
手機客戶端與後臺互動中一般會用到加密傳輸。至於不用HTTPS,本文不討論,這裡給出使用springmvc +http協議,手機客戶端加密部分資料值,後臺進行統一解密。實現思路就是使用攔截器,使用裝飾模式,可以直接使用HttpServletRequestWrapp
Mybatis部分 or SpringMVC部分
專用 委托 color 協同工作 調用 myba http 懶漢 程序 Mybatis部分 1、mybatis與hibernate區別? Hibernate是面向對象的思想操作數據、mybatis是以純sql操作數據 相對於mybatis容易優化.擴展性好,但是移植
SpringMVC-----部分功能學習
post spring 部分 error class 只需要 body mvc 錯誤頁 1、默認錯誤頁面設置 <error-page> <exception-type>java.lang.Throwable</e
mysql5.6 TLS加密通訊
本文參考https://dev.mysql.com/doc/refman/5.6/en/building-with-encrypted-connection-support.html 在mysql的服務端和客戶端使用加密通訊的,需要系統支援OpenSSL 或者 yaSSL: My
JS到PHP使用RSA演算法進行加密通訊
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
SSL及其加密通訊過程
SSL及其加密通訊過程 什麼是SSL SSL英文全稱Secure Socket Layer,安全套接層,是一種為網路通訊提供安全以及資料完整性的安全協議,它在傳輸層對網路進行加密。它主要是分為兩層: SSL記錄協議:為高層協議提供安全封裝、壓縮、加密等基本功能 SSL握手協議:用於在資料傳輸開
CentOS 7.5二進位制部署Kubernetes1.12(加密通訊)(五)
一、安裝方式介紹 1、二進位制安裝 使用二進位制檔案安裝,好處是可以安裝任意版本的 Kubernetes,對一些新版本新功能追求的同學比較合適,壞處是配置比較複雜,很多軟體包因為一些原因,我們在大陸是訪問不到的。這篇文章我們使用加密通訊,也就是各元件和kube-apiserver的通訊採用加密方式。 二
雜湊演算法與加密通訊、數字簽名
作為通訊工程的學生,我在學習《資訊理論與編碼》這門課的時候瞭解過關於加密解密的一些知識,但覺得不夠深入,不甚過癮。 這幾天學習了跟密碼學有很大關聯的雜湊演算法,跟大家分享一下。 雜湊演算法是什麼 雜湊,英文為Hash,有時翻譯為雜湊,所以雜湊
原始碼部分加密混淆方案
原始碼部分混淆加密方案 背景:專案業務原始碼需要開放給甲方,但其中有部分核心程式碼需要加密處理。 目的:實現對核心程式碼DLL的加密,但不能影響其他模組對該DLL的引用。 加密工具:DotfuscatorPro_4.9.6 反編譯工具:.Net Reflector (用於對加密效果進行驗證)
https加密通訊過程圖解
https其實就是建構在SSL/TLS之上的 http協議,所以https比http要佔用更多的資源 http使用TCP 三次握手建立連線,客戶端和伺服器需要交換3個包,https除了 TC
數字簽名是什麼?https加密通訊的理解。
今天,我讀到一篇好文章。 它用圖片通俗易懂地解釋了,"數字簽名"(digital signature)和"數字證書"(digital certificate)到底是什麼。 我對這些問題的理解,一直是模模糊糊的,很多細節搞不清楚。讀完這篇文章後,發現思路一下子就理清了。為了加深記憶,我把文字和圖片都翻譯
以太坊RLPx加密通訊協議
以太坊p2p的Server物件中使用的conn定義了一個transport介面,目前該介面的實現只看到了rlpx,可以推測以太坊p2p網路中的節點通訊都採用了該協議.RLPx協議屬於會話層的協議,主要功能是在節點之間建立並維持通訊,節點的發現和節點之間資料流的傳輸主要是由傳輸
Android客戶端與伺服器端RSA加密通訊加密字元不一致相關問題
RSA非對稱加密演算法 ,適用於資料量較小的情況,比如一般的用法: 1、生成RSA金鑰對,公鑰發給客戶端使用,私鑰由伺服器使用; 2、客戶端用公鑰加密所有發出的資料,也用公鑰解密所有收到的資料; 3、伺服器用私鑰加密所有發出的資料,也用私鑰解密所有收到的資料; 但Andro
TLS協議分析 (九) 現代加密通訊協議設計
轉自:http://chuansong.me/n/1286704052752 六. TLS協議給我們的啟發 — 現代加密通訊協議設計 在看了這麼多的分析和案例之後,我們已經可以歸納出加密通訊協議設計的普遍問題,和常見設計決策, 設計決策點: 四類基礎演算法 加
Node.js 基於 ursa 模組的 RSA 加密解密(已與IOS,Android實現加密通訊)
前幾天除錯一個RSA加密,遇到一些問題,在網上找了好久好久,與Node.js相關的資源少得非常可憐,最後還是靠自己一步一步解決了,今天把程式碼和一些心得拿出來分享一下: cnode連結地址:https://cnodejs.org/topic/54d2de4cf
Socket服務端與客戶端加密通訊
客戶端:# -*- coding: utf-8 -*- # @Time : 2018/2/19 14:15 # @Author : Xifeng2009 import socket import time from Crypto.Cipher import AES
Apache Httpd 2.2配置CA證書,實現Https加密通訊
# 生成自己的證書申請檔案,以 .csr 結尾的檔案。 [root@centos6 ssl]$openssl req -new -key /etc/httpd/conf.d/ssl/httpd.key -out /etc/httpd/conf.d/ssl/httpd.csr You are about to
mariadb實現主從加密通訊的詳細步驟
show variable dir 使用 啟動 查看 out req word mariadb實現主從加密通訊的詳細步驟 1. 實驗環境: A. 3臺centos7服務器,mariadb版本:5.5.60 B. 服務器角色: a) master
EFK教程(4) - ElasticSearch叢集TLS加密通訊
基於TLS實現ElasticSearch叢集加密通訊 作者:“發顛的小狼”,歡迎轉載 目錄 ▪ 用途 ▪ ES節點資訊 ▪ Step1. 關閉服務 ▪ Step2. 建立CA證書 ▪ Step3. 建立CERT證書 ▪ Step4. 建立金鑰庫 ▪ Step5. 刪除CA證書 ▪ Step6. 修改el
如何恢復部分WannaCry勒索軟件加密文件
安全模式 計算機 windows7 加密軟件 wannacry WannaCry勒索軟件中毒後的計算機文件會被加密,但是通過測試發現,加密軟件先加密文件然後再刪除原文件。所以我們可以嘗試使用硬盤恢復工具,恢復部分文件,因為在電腦的安全模式下Wannacry並沒有運行。中毒後如果想恢復部