spring加密解密
① SpringBoot 請求消息體解密(通信加密解密)
在一些安全性要求較高的項目中,我們希望客戶端請求數據可以做到數據加密,伺服器端進行解密。(單純的HTTPS仍難以滿足安全需要。)
本文基於SpringBoot針對消息體進行解密,目前僅支持請求消息解密。(響應消息過大情況下,加密會帶來嚴重的性能問題。)
流程如下:
使用DES cbc模式對稱加密請求體。要求客戶端請求前加對消息體進行加密,伺服器端通過SpringMVC Advice攔截請求解密後,傳給controller的方法。
@ControllerAdvice註解可以掃描針對Controller層的擴展組件。通過@Sort註解可以使其支持順序載入。
RequestBodyAdviceAdapter是RequestBodyAdvice適配器類,可以方便的擴展所需要的方法。
RequestBodyAdvice功能如下:
允許在請求消息體在被讀取及調用convert轉換成實體之前做一些個人化操作,作用於含有@RequestBody註解的請求。實現此介面的類,需要在RequestMappingHandlerAdapter中配置或通過@ControllerAdvice註解配置。
原文如下:
使用以下註解即可快速開啟全部請求的伺服器端消息體解密功能。
使用scan-annotation可開啟註解所標注的Conrtoller的類或其方法的解密功能。將要解密的方法或類上添加@SecretBody註解。並開啟以下配置:
可以使用annotation-class配置自己的自定義註解:
作用於整個類:
作用於方法:
默認密鑰如下,可以自行修改
前端調用時,需先將要請求的消息體通過DEScbc模式加密消息體(如json字元串)後傳輸。一般在http工具的請求攔截器中進行處理。如為json,仍然需要指定content-type為application/json。
postman請求示例如下:
② 【參數加密】前後端分離請求參數加密與響應結果加密處理
編輯更改過濾器的注冊
因注冊到spring security 組件上無法攔截ignoing 的請求,更改為spring boot 方式注冊,注意點為order 排序的設置,響應最簡單設置為最大就好。關鍵點是請求filter的位置非常重要。這里要放在 spring security 內置過濾器前,spring CorsFilter 之後,此處多次測試猜的數為-100,暫未找到更科學方法。
JsonUtils 工具類
java結束
上訴把程序以及思路提供,可以根據自己需要的加密解密方式進行處理,以下兩種方式我進行了嘗試最終選擇了第二種。
③ java開發人事系統,需要對敏感數據進行加密存儲,為了不影響統計分析和查詢功能,大家有好的實現方案嗎
沒錯,資料庫中存的ID項加密。查詢匹配時使用js或後台將用戶輸入的內容加密後去資料庫匹配。查詢到加密的資料庫數據後在後台解密在發送到前台。如果對於安全要求較高就不要在js中解密。最後,類似於ID的數據加密模式和敏感信息的加密模式要不一致,這樣可以保護你需要保護的敏感信息,即使有人通過js破解了你的ID等數據的加密,也無法獲取真正的敏感信息。
④ SpringBoot Starter自定義註解 - 介面加解密
目標
本章我們將編寫一個starter,目標如下:
1、對外提供 @OpenAPI 註解,使用此註解它會對接收的請求數據進行解密,對要返回的數據進行加密。
2、完成服務端使用示例
3、完成前端調用示例
加密規則
1、對業務數據進行AES加密,示意代碼:encryptData=AES("業務數據", aesKey)
2、對AES的key進行公鑰加密,示意代碼:encryptKey=RSA(aesKey, 公鑰)
3、簽名sign=md5(encryptData+encryptKey)
加密後請求示例
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
請求參數
服務端返回示例
pom.xml
定義註解
配置公私鑰
具體代搜行碼邏輯
定義切面和自動殲巧裝配
spring.factories
服務端修改
在業氏漏鍵務項目中引入jar 包
配置公私鑰
改動的地方很少,只需要在原介面增加@OpenAPI註解即可
前端修改
修改前代碼
修改後要先對參數加密,然後對返回數據解密
安裝兩個加密庫
封裝RSA、AES和Base64加解密
⑤ springmvc spring mybatis 框架搭建的MAVEN項目,怎麼加密解密啊,有源碼嗎
不知道你說的加密解密是指項目中對某個欄位加密解密,還是 要多源碼進行加密解密,如果是對某個欄位加密解密,比如密碼,可以自己手寫一個工具類(網上也可以找到),將傳過去的字元串用MD5或者sha1加密後返回的方式,需要加密就調用這個方法,如果你要對整個項目的源碼加密,那應該是沒辦法,因為不管怎麼加密運行的時候都需要轉化為位元組碼。位元組碼.class都是可以反編譯過來的
⑥ 「青鋒愛分享」Springboot+python之RSA加解密方案(RSA深入)二
本篇並缺文章要結合上一節文章一起看。
青鋒愛分享-RSA-Springboot+Python整合
碼雲搜索: 青鋒 會有驚喜哦哦。
通過python生成的公鑰私鑰 格式PKCS1 。
生成pem格式如下:
私鑰頭(-----BEGIN RSA PRIVATE KEY-----)
私鑰尾(-----END RSA PRIVATE KEY-----)
我需要將此私鑰轉換為DER編碼的PKCS8未加密格式,以便絕戚辯與java伺服器代碼一起使用,特別是PKCS8EncodedKeySpec。我已經試過使用rsa和pkcs8命令的OpenSSL,如果有更簡單的辦法,沒有特別需要使仔迅用openssl。
RSA私鑰格式PKCS1和PKCS8相互轉換
RSA公鑰格式PKCS1和PKCS8相互轉換
以下轉換基於openssl命令的操作;
執行:openssl genrsa -out private.pem 1024
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlLm5++/wwSfq5KfY
H8q1AO/
Uo4OMcmoSz3IAp/7//ewIDAQAB
AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb
lFCyO7VXOmoIJqX/Jr2aER8bFtG+
lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78
HyxRcStW+
n0UxgT55MPXWGdMRXUUOCNnMilaw/
HvK0IW3zpOgf/+/W565ROI/fjkR1qCD
rZJeHgqMWDlIUuR9+BdBAkAI8+
puQxMonRWTN+
-----END RSA PRIVATE KEY-----
執行:openssl pkcs8 -topk8 -inform PEM -in private.pem -outform pem -nocrypt -out pkcs8.pem
-----BEGIN PRIVATE KEY-----
+n
yHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+/T
uaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4xyahLPcgCn/v8WcxqDUh6VJ92
/
Q3fic/
+
nt0qVQJAOmMZ67caK+YHZ0M3Rp3adQgF+
//6OHlRQIElgect4wb
CbtfXWu9AfXNbTlXH39bnrlE4j9+
Yt1Zx5df0+
HLU0VEwSQa7rvmY=
-----END PRIVATE KEY-----
執行:openssl rsa -in pkcs8.pem -out pkcs1.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlLm5++/wwSfq5KfY
H8q1AO/
Uo4OMcmoSz3IAp/7//ewIDAQAB
AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb
lFCyO7VXOmoIJqX/Jr2aER8bFtG+
lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78
HyxRcStW+
n0UxgT55MPXWGdMRXUUOCNnMilaw/
HvK0IW3zpOgf/+/W565ROI/fjkR1qCD
rZJeHgqMWDlIUuR9+BdBAkAI8+
puQxMonRWTN+
-----END RSA PRIVATE KEY-----
可以看出結果和1是一致的;
執行:openssl rsa -in private.pem -pubout -out public.pem
-----BEGIN PUBLIC KEY-----
+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/
/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
5. 從pkcs8私鑰中生成pkcs8公鑰
執行:openssl rsa -in pkcs8.pem -pubout -out public_pkcs8.pem
-----BEGIN PUBLIC KEY-----
+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/
/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看出結果和4是一樣的;
執行:openssl rsa -pubin -in public.pem -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/=
-----END RSA PUBLIC KEY-----
openssl rsa -pubin -in public_pkcs8.pem -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/=
-----END RSA PUBLIC KEY-----
可以看出轉換的結果是一致的;
執行:openssl rsa -RSAPublicKey_in -in pub_pkcs1.pem -pubout
-----BEGIN PUBLIC KEY-----
+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/
/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看到和上面4,5的結果是一致的;
最後一點:
iOS上用的是pkcs8格式的公鑰
openssl用的是pkcs1格式的公鑰
知道私鑰以後是可以導出公鑰的,所以私鑰一定要保證安全
知道公鑰不可以導出私鑰
解決方案針對是window電腦。
配置:SystemRoot/ System32 環境變數。
1、郵件我的電腦-選擇下【屬性】。
2、選擇高級系統設置
3、選擇【高級】-【環境變數】
4、雙擊打開path,進行編輯
5、 接著我們在這名字後面加【;System32】就可以了。
安裝 Win64 OpenSSL,地址: http://slproweb.com/procts/Win32OpenSSL.html
下載後根據提示一步一步安裝,安裝完成後:
雙擊start.bat 啟動