java實現使用 "DESede" 對稱加密的 加解密工具類

前言:

Java實現 "DESede" 對稱加密;

前提:

在代碼運行前,需要提前將一個依賴導入到項目中 pom.xml 中,使用這個依賴中的base64進行編解碼;

<!-- base64編碼使用 -->
<dependency>
     <groupId>commons-codec</groupId>
     <artifactId>commons-codec</artifactId>
     <version>1.12</version>
</dependency>

 代碼:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;


public class DESedeUtil {
	
	/**
	 * 密鑰算法
	 */
	private static final String KEY_ALGORITHM = "DESede";
	
	/**
	 * 加密/解密算法 / 工作模式 / 填充方式
	 * Java 6支持PKCS5Padding填充方式
	 * Bouncy Castle支持PKCS7Padding填充方式
	 */
	private static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
	
	
	
	
	/**
	 * @Description: 生成密鑰, 返回168位的密鑰
	 * @return
	 * @throws Exception
	 */
	public static String generateKey() throws Exception {
		//實例化密鑰生成器
		KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
		//DESede 要求密鑰長度爲 112位或168位
		kg.init(168);
		//生成密鑰
		SecretKey secretKey = kg.generateKey();
		//獲得密鑰的字符串形式
		return Base64.encodeBase64String(secretKey.getEncoded());
	}
	
	
	
	/**
	 * @Description: DES進行加密
	 * @param source 待加密的原字符串
	 * @param key  加密時使用的 密鑰
	 * @return   返回經過base64編碼的字符串
	 * @throws Exception
	 */
    public static String encrypt(String source, String key) throws Exception {
        byte[] sourceBytes = source.getBytes("UTF-8");
    	byte[] keyBytes = Base64.decodeBase64(key);
    	Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
    	cipher.init(Cipher.ENCRYPT_MODE,new SecretKeySpec(keyBytes, KEY_ALGORITHM));
    	byte[] decrypted = cipher.doFinal(sourceBytes);
    	return Base64.encodeBase64String(decrypted);
    }
    
    
    
    /**
     * @Description:  DES解密
     * @param encryptStr  DES加密後的再經過base64編碼的密文
     * @param key  加密使用的密鑰
     * @return  返回 utf-8 編碼的明文
     * @throws Exception
     */
    public static String decrypt(String encryptStr, String key) throws Exception {
    	byte[] sourceBytes = Base64.decodeBase64(encryptStr);
		byte[] keyBytes = Base64.decodeBase64(key);
    	Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
    	cipher.init(Cipher.DECRYPT_MODE,new SecretKeySpec(keyBytes, KEY_ALGORITHM));
    	byte[] decoded = cipher.doFinal(sourceBytes);
    	return new String(decoded, "UTF-8");
    }
    
    
    
    // test
    public static void main(String[] args) {
    	try {
    		// 生成祕鑰
        	String key = generateKey();
        	System.out.println("祕鑰:"+key);
        	
        	// 加密
        	String encryptStr = encrypt("hello", key);
        	System.out.println("密文:"+ encryptStr);
        	// 解密
        	String resource = decrypt(encryptStr, key);
        	System.out.println("明文:"+ resource);
        	
        	System.out.println("校驗:"+ "hello".equals(resource));
        	
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    
}

 

不要忘記留下你學習的足跡 [點贊 + 收藏 + 評論]嘿嘿ヾ

一切看文章不點贊都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!開個玩笑,動一動你的小手,點贊就完事了,你每個人出一份力量(點贊 + 評論)就會讓更多的學習者加入進來!非常感謝! ̄ω ̄=

發佈了22 篇原創文章 · 獲贊 33 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章