3des源碼
提供一個基於註解實現介面加密解密工具源碼,旨在方便在軟體項目中對數據進行加密與解密。該工具支持多種加密方式,包括Base64、DES、3DES、AES與RSA,以及MD5加密。
使用方法:只需在需要加密解密的介面上添加相應的註解即可實現功能。
此加密解密組件僅適用於SpringBoot項目。
步驟如下:
1. 從gitee.com/zhao_jian_jun...拉取代碼至本地。
2. 使用meavn的install將項目打包為.jar文件。
3. 將加解密依賴引入至項目中。
4. 在配置文件中說明使用的加密方式的秘鑰。RSA為非對稱加密,需提供兩個秘鑰。變數名如下:
5. 對請求相應結果加密,使用@ZjjEncryptResponse註解並指定加密方式。
6. 前端接收到的為加密後的數據。
7. 對請求參數進行解密,使用@ZjjDecryptRequest註解。
2. 3des加密 密鑰
Des的密鑰是8個位元組,但實際上只有7個用上,也就是56位。
3des是用3個或2個des密鑰加密一串明文,最少112位最多168位。也就是14~21個字母或數字元號。
從安全性上來說密鑰位數不足是不能加密的,但有些軟體為了保證用戶可用,會自動使用某種策略自動填充滿,一般是重復填充或採用特定字元,如果你只填了1234作為密鑰,有可能真正用於加密的密鑰是123412341234123412341或者123400000000000000000類似的。
另外請注意,最好去做3des的密鑰位數不是7或8,因為des的加密解密是同一個過程,這樣搞在填充後實際上是只使用了一次des加密••••••還不如5位6位好••••••
如果是你編程時碰到的問題,把你的源碼發來看看再說。
3. php的3des加密結果與java不一致
這個曾經研究過一點,如果你有php段完整的加密源代碼,那麼還是有可能做到結果一致的,否則很難,因為雖然都叫3des,但裡面卻有多種演算法,比如php加密時是否使用了向量等等
4. OpenSSL之3DES用法
3DES(或稱為Triple DES)是三重數據加密演算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個數據塊應用三次DES加密演算法。由於計算機運算能力的增強,原版DES密碼的密鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。
其具體實現如下:設Ek()和Dk()代表DES演算法的加密和解密過程,K代表DES演算法使用的密鑰,P代表明文,C代表密文,這樣:
3DES加密過程為:C=Ek3(Dk2(Ek1(P)))
3DES解密過程為:P=Dk1(EK2(Dk3(C)))
本文假設你已經安裝好了OpenSSL,並且持有一份1.1.1的源碼。
3DES相關的頭文件在des.h中、源文件在crypto/des目錄中。
# define DES_ENCRYPT 1
# define DES_DECRYPT 0
這里定義了加密和解密的類型。
typedef unsigned int DES_LONG;
這個結構定義了DES的密鑰上下文。相關欄位含義:
ks —— 16輪子密鑰。
在1.1.1中,大多數的數據結構已經不再向使用者開放,從封裝的角度來看,這是更合理的。如果你在頭文件中找不到結構定義,不妨去源碼中搜一搜。
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, int enc);
使用電子密碼本方式加解密一個分組。
ks1、ks2、ks3分別為傳入的三個64位密鑰。
其內部實現為:
可以看到內部使用了DES_encrypt3()這個內部分組加密函數,並且傳入了3個密鑰。
我們繼續來看DES_encrypt3()是如何利用這3個密鑰的。
void DES_encrypt3(DES_LONG *data, DES_key_schele *ks1,
DES_key_schele *ks2, DES_key_schele *ks3)
其內部實現為:
可以看到內部又繼續使用了DES_encrypt2()這個分組加密函數。沒有必要再繼續解開DES_encrypt2()了,因為它主要根據密鑰做分組的加解密處理。
關於三個密鑰的利用關系,在DES_encrypt3()中主要是做三次疊加運算:
使用第一個密鑰做分組加密運算。
使用第二個密鑰做分組解密運算。
使用第三個密鑰做分組加密運算。
3DES的疊加運算,根據密鑰的組合關系,經常又表現為以下模式:
void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
long length,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, DES_cblock *ivec, int enc);
使用密文分組鏈加解密。
參數ivec為初使化向量,在本函數返回時會被更新,可用於下一次分組運算。
註:
從源碼實現來看,雖然DES_ede3_cbc_encrypt()自身支持明文長度多於一個分組的計算,但是卻沒有處理填充,所以從統一封裝來看,建議開發者在使用這個函數時,同DES_ecb_encrypt()的用法一樣,傳入單個分組。
下面這個例子演示了使用普通DES加密,3DES的DES的兼容模式解密(即3個密鑰完全相同)。
輸出:
f8a8707fea7d45cd
3132333435363738