天天看点

java的DES加密、解密和MD5加密

今天需要做一个数据的加密和解密,在查看了相关的资料和代码后,初次写出了一个实例:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import com.sun.org.apache.xml.internal.security.utils.Base64;

/** 
 * 加密解密 工具
 *  
 * @author luosheng
 */  
public class SecretUtil {  
	/**
	 * 密匙
	 */
	private static final String ENCYPTION_KEY = "123dddd55555";
    /** 
     * 进行MD5加密 
     *  
     * @param info 
     *            要加密的信息 
     * @return String 加密后的字符串 
     */  
    public static String encryptToMD5(String info) {  
        byte[] digesta = null;  
        try {  
            // 得到一个md5的消息摘要  
            MessageDigest alga = MessageDigest.getInstance("MD5");  
            // 添加要进行计算摘要的信息  
            alga.update(info.getBytes());  
            // 得到该摘要  
            digesta = alga.digest();  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        // 将摘要转为字符串  
        String rs = null;
		try {
			rs = URLEncoder.encode(Base64.encode(digesta), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}  
        return rs;  
    }  
    /** 
     * 创建密匙 
     *  
     * @param algorithm 
     *            加密算法,可用 DES,DESede,Blowfish 
     * @return SecretKey 秘密(对称)密钥 
     */  
    private static SecretKey createSecretKey(String algorithm) {  
        // 声明KeyGenerator对象  
        KeyGenerator keygen;  
        // 声明 密钥对象  
        SecretKey deskey = null;  
        try {  
            // 返回生成指定算法的秘密密钥的 KeyGenerator 对象  
            keygen = KeyGenerator.getInstance(algorithm);  
            keygen.init(new SecureRandom(ENCYPTION_KEY.getBytes()));
            // 生成一个密钥  
            deskey = keygen.generateKey();  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        // 返回密匙  
        return deskey;  
    }  
    /** 
     * 进行DES加密 
     *  
     * @param key 
     *            密匙 
     * @param info 
     *            要加密的信息 
     * @return String 加密后的信息 
     */  
    public static String encryptToDES(String info) {  
        // 定义 加密算法,可用 DES,DESede,Blowfish  
        String Algorithm = "DES";  
        // 定义要生成的密文  
        byte[] cipherByte = null;  
        String cipherString = null;
        try {  
            // 得到加密/解密器  
            Cipher c1 = Cipher.getInstance(Algorithm);  
            // 用指定的密钥和模式初始化Cipher对象  
            c1.init(Cipher.ENCRYPT_MODE, createSecretKey("DES"));  
            // 对要加密的内容进行编码处理,  
            cipherByte = c1.doFinal(info.getBytes("UTF-8")); 
            cipherString = new String(URLEncoder.encode(Base64.encode(cipherByte),"UTF-8"));
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        // 返回密文
        return cipherString;
    }  
    /** 
     * 根据密匙进行DES解密 
     *  
     * @param key 
     *            密匙 
     * @param sInfo 
     *            要解密的密文 
     * @return String 返回解密后信息 
     */  
    public static String decryptByDES(String sInfo) {  
        // 定义 加密算法,  
        String Algorithm = "DES";  
        byte[] cipherByte = null;  
        try {  
            // 得到加密/解密器  
            Cipher c1 = Cipher.getInstance(Algorithm);  
            // 用指定的密钥和模式初始化Cipher对象 
            c1.init(Cipher.DECRYPT_MODE, createSecretKey("DES"));  
            // 对要解密的内容进行编码处理  
            cipherByte = c1.doFinal(Base64.decode(URLDecoder.decode(sInfo,"UTF-8"))); 
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
        String res = null;
        try {
			res =  new String(cipherByte,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}  
		return res;
    }  
    
    /** 
     * 测试 
     *  
     * @param args 
     */  
    public static void main(String[] args) {  
        // 执行MD5加密  
        System.out.println("经过MD5:" + SecretUtil.encryptToMD5("asdfgh"));  
        // 用密匙加密信息
        String str1 = SecretUtil.encryptToDES("sdfghjd");  
        System.out.println("使用des加密信息:" + str1);  
        // 使用密匙解密 
        String str2 = SecretUtil.decryptByDES(str1);  
        System.out.println("解密后为:" + str2);  
        
    }  
}  
           

继续阅读