1. 程式人生 > >java 的加密演算法工具的集合

java 的加密演算法工具的集合

package com.zy.suanfa;


import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;  
import java.security.NoSuchAlgorithmException;  
import java.security.SecureRandom;  
  
import javax.crypto.BadPaddingException;  
import javax.crypto.Cipher;  
import javax.crypto.IllegalBlockSizeException;  
import javax.crypto.KeyGenerator;  
import javax.crypto.NoSuchPaddingException;  
import javax.crypto.SecretKey;  
import javax.crypto.spec.SecretKeySpec;  
  
public class AESUtils  
{  
    /** 
     * 加密 
     *  
     * @param content 需要加密的內容 
     * @param password  加密密碼 
     * @return 
     */  
    public static byte[] encrypt(String content, String password)  
    {  
        try  
        {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            kgen.init(128, new SecureRandom(password.getBytes()));  
            SecretKey secretKey = kgen.generateKey();  
            byte[] enCodeFormat = secretKey.getEncoded();  
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
            Cipher cipher = Cipher.getInstance("AES");// 建立密碼器  
            byte[] byteContent = content.getBytes("utf-8");  
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化  
            byte[] result = cipher.doFinal(byteContent);  
            return result; // 加密  
        }  
        catch (NoSuchAlgorithmException e)  
        {  
            e.printStackTrace();  
        }  
        catch (NoSuchPaddingException e)  
        {  
            e.printStackTrace();  
        }  
        catch (InvalidKeyException e)  
        {  
            e.printStackTrace();  
        }  
        catch (UnsupportedEncodingException e)  
        {  
            e.printStackTrace();  
        }  
        catch (IllegalBlockSizeException e)  
        {  
            e.printStackTrace();  
        }  
        catch (BadPaddingException e)  
        {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    /**解密 
     * @param content  待解密內容 
     * @param password 解密金鑰 
     * @return 
     */  
    public static byte[] decrypt(byte[] content, String password)  
    {  
        try  
        {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            kgen.init(128, new SecureRandom(password.getBytes()));  
            SecretKey secretKey = kgen.generateKey();  
            byte[] enCodeFormat = secretKey.getEncoded();  
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
            Cipher cipher = Cipher.getInstance("AES");// 建立密碼器  
            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化  
            byte[] result = cipher.doFinal(content);  
            return result; // 加密  
        }  
        catch (NoSuchAlgorithmException e)  
        {  
            e.printStackTrace();  
        }  
        catch (NoSuchPaddingException e)  
        {  
            e.printStackTrace();  
        }  
        catch (InvalidKeyException e)  
        {  
            e.printStackTrace();  
        }  
        catch (IllegalBlockSizeException e)  
        {  
            e.printStackTrace();  
        }  
        catch (BadPaddingException e)  
        {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    /**將二進位制轉換成16進位制 
     * @param buf 
     * @return 
     */  
    public static String parseByte2HexStr(byte buf[])  
    {  
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < buf.length; i++)  
        {  
            String hex = Integer.toHexString(buf[i] & 0xFF);  
            if (hex.length() == 1)  
            {  
                hex = '0' + hex;  
            }  
            sb.append(hex.toUpperCase());  
        }  
        return sb.toString();  
    }  
  
    /**將16進位制轉換為二進位制 
     * @param hexStr 
     * @return 
     */  
    public static byte[] parseHexStr2Byte(String hexStr)  
    {  
        if (hexStr.length() < 1)  
            return null;  
        byte[] result = new byte[hexStr.length() / 2];  
        for (int i = 0; i < hexStr.length() / 2; i++)  
        {  
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);  
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);  
            result[i] = (byte)(high * 16 + low);  
        }  
        return result;  
    }  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args)  
    {  
        String content = "test3444";  
        String password = "11";  
        // 加密  
        System.out.println("加密前:" + content);  
        byte[] encryptResult = encrypt(content, password);  
        String encryptResultStr = parseByte2HexStr(encryptResult);  
        System.out.println("加密後:" + encryptResultStr);  
        // 解密  
        byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);  
        byte[] decryptResult = decrypt(decryptFrom, password);  
        System.out.println("解密後:" + new String(decryptResult));  
    }  
  
}  
七 、RSA 演算法

 RSA公開金鑰密碼體制。所謂的公開金鑰密碼體制就是使用不同的加密金鑰與解密金鑰,是一種“由已知加密金鑰推匯出解密金鑰在計算上是不可行的”密碼體制。   在公開金鑰密碼體制中,加密金鑰(即公開金鑰)PK是公開資訊,而解密金鑰(即祕密金鑰)SK是需要保密的。