Java 3DES 加密 解密 示例

jopen 11年前發布 | 24K 次閱讀 加密 解密 Java開發

import java.io.IOException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

@SuppressWarnings("restriction")
public class TripleDESTest {

/** 
 * 根據參數生成Key; 
 *  
 * @param strKey 
 */  
private Key getKey(String strKey) {  
    Key key = null;  
    try {  
        KeyGenerator _generator = KeyGenerator.getInstance("DES");  
        _generator.init(new SecureRandom(strKey.getBytes()));  
        key = _generator.generateKey();  
        _generator = null;  
    } catch (NoSuchAlgorithmException e) {  
        e.printStackTrace();  
    }  
    return key;  
}  

/** 
 * 獲得一次3DES加密后的密文 
 *  
 * @param 
 * @return strMi 
 */  
public String getEncString(String strMing, String strKey) {  
    byte[] byteMi = null;  
    byte[] byteMing = null;  
    String strMi = "";  
    Key key = getKey(strKey);  
    BASE64Encoder encoder = new BASE64Encoder();  
    try {  
        byteMing = strMing.getBytes("utf-8");  
        byteMi = getEncCode(byteMing, key);  
        strMi = encoder.encode(byteMi);  
    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        encoder = null;  
        byteMi = null;  
        byteMing = null;  
    }  
    return strMi;  
}  

/** 
 * 獲得兩次3DES加密后的密文 
 *  
 * @param 
 * @return strMi 
 */  
public String getTwiceEncString(String strMing, String strKey) {  
    return getEncString(getEncString(strMing, strKey), strKey);  
}  

/** 
 * 獲得一次3DES解密后的明文 
 *  
 * @param 
 * @return strMing 
 */  
public String getDecString(String strMi, String strKey) {  
    BASE64Decoder base64Decoder = new BASE64Decoder();  
    byte[] byteMing = null;  
    byte[] byteMi = null;  
    String strMing = "";  
    Key key = getKey(strKey);  
    try {  
        byteMi = base64Decoder.decodeBuffer(strMi);  
        byteMing = getDecCode(byteMi, key);  
        strMing = new String(byteMing, "utf-8");  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        base64Decoder = null;  
        byteMing = null;  
        byteMi = null;  
    }  
    return strMing;  
}  

/** 
 * 獲得兩次3DES解密后的明文 
 *  
 * @param 
 * @return strMing 
 */  
public String getTwiceDecString(String strMi, String strKey) {  
    return getDecString(getDecString(strMi, strKey), strKey);  
}  

/** 
 * 獲得一次3DES加密后的密文 
 *  
 * @param byts 
 * @return 
 */  
private byte[] getEncCode(byte[] byts, Key key) {  
    byte[] byteFina = null;  
    Cipher cipher;  
    try {  
        cipher = Cipher.getInstance("DES");  
        cipher.init(Cipher.ENCRYPT_MODE, key);  
        byteFina = cipher.doFinal(byts);  
    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        cipher = null;  
    }  
    return byteFina;  
}  

/** 
 * 獲得一次3DES解密后的明文 
 *  
 * @param bytd 
 * @return 
 */  
private byte[] getDecCode(byte[] bytd, Key key) {  
    byte[] byteFina = null;  
    Cipher cipher = null;  
    try {  
        cipher = Cipher.getInstance("DES");  
        cipher.init(Cipher.DECRYPT_MODE, key);  
        byteFina = cipher.doFinal(bytd);  
    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        cipher = null;  
    }  
    return byteFina;  
}  

public static void main(String[] args) {  
    TripleDESTest td = new TripleDESTest();  
    Key k = td.getKey("Key");  
    System.out.println("獲得的密鑰key是:" + k);  
    String encyStr = td.getEncString("Test", "Key");  
    System.out.println("一次加密后的密文是:" + encyStr);  
    String decyStr = td.getDecString(encyStr, "Key");  
    System.out.println("一次解密后的明文是:" + decyStr);  
    encyStr = td.getTwiceEncString("Test", "Key");  
    System.out.println("兩次加密后的密文是:" + encyStr);  
    decyStr = td.getTwiceDecString(encyStr, "Key");  
    System.out.println("兩次解密后的明文是:" + decyStr);  
}  

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!