字符串加密(一)

2014-11-24 09:40:05 · 作者: · 浏览: 7
加密类:
package secret;  
  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
import java.security.KeyPair;  
import java.security.KeyPairGenerator;  
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import java.security.PrivateKey;  
import java.security.PublicKey;  
import java.security.SecureRandom;  
import java.security.Signature;  
  
import javax.crypto.Cipher;  
import javax.crypto.KeyGenerator;  
import javax.crypto.SecretKey;  
  
  
/**    
 * 加密解密    
 *     
 * @author 毛兴宇    
 * @since  http://blog.csdn.net/powmxypow   
 */      
public class Secret {  
    /**    
     * 进行MD5加密    
     *     
     * @param info 要加密的信息    
     * @return String 加密后的字符串    
     */      
    public 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 = byte2hex(digesta);       
        return rs;       
    }       
    /**    
     * 进行SHA加密    
     *     
     * @param info 要加密的信息    
     * @return String 加密后的字符串    
     */      
    public String encryptToSHA(String info) {       
        byte[] digesta = null;       
        try {       
            // 得到一个SHA-1的消息摘要       
            MessageDigest alga = MessageDigest.getInstance("SHA-1");       
            // 添加要进行计算摘要的信息       
            alga.update(info.getBytes());       
            // 得到该摘要       
            digesta = alga.digest();       
        } catch (NoSuchAlgorithmException e) {       
            e.printStackTrace();       
        }       
        // 将摘要转为字符串       
        String rs = byte2hex(digesta);       
        return rs;       
    }       
    ////////////////////////////////////////////////////////////////////////////       
    /**    
     * 创建密匙    
     *     
     * @param algorithm 
加密算法,可用 DES,DESede,Blowfish * @return SecretKey 秘密(对称)密钥 */ public SecretKey createSecretKey(String algorithm) { // 声明KeyGenerator对象 KeyGenerator keygen; // 声明 密钥对象 SecretKey deskey = null; try { // 返回生成指定算法的秘密密钥的 KeyGenerator 对象 keygen = KeyGenerator.getInstance(algorithm); // 生成一个密钥 deskey = keygen.generateKey(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // 返回密匙 return deskey; } /** * 根据密匙进行DES加密 * * @param key 密匙 * @param info 要加密的信息 * @return String 加密后的信息 */ public String encryptToDES(SecretKey key, String info) { // 定义 加密算法,可用 DES,DESede,Blowfish String Algorithm = "DES"; // 加密随机数生成器 (RNG),(可以不写) SecureRandom sr = new SecureRandom(); // 定义要生成的密文 byte[] cipherByte = null; try { // 得到加密/解密器 Cipher c1 = Cipher.getInstance(Algorithm); // 用指定的密钥和模式初始化Cipher对象 // 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE) c1.init(Cipher.ENCRYPT_MODE, key, sr); // 对要加密的内容进行编码处理, cipherByte = c1.doFinal(info.getBytes()); } catch (Exception e) { e.printStackTrace(); } // 返回密文的十六进制形式 return byte2hex(cipherByte); } /** * 根据密匙进行DES解密 * * @param key 密匙 * @param sInfo 要解密的密文 * @return String 返回解密后信息 */ public String decryptByDES(SecretKey key, String sInfo) { // 定义 加密算法, String Algorithm = "DES"; // 加密随机数生成器 (RNG) SecureRandom sr = new SecureRandom(); byte[] cipherByte = null; try { // 得到加密/解密器 Cipher c1 = Cipher.getInstance(Algorithm); // 用指定的密钥和模式初始化Cipher对象 c1.init(Cipher.DECRYPT_MODE, key, sr); // 对要解密的内容进行编码处理 cipherByte = c1.doFinal(hex2byte(sInfo));