JAVA后台数据加密

给一个简单的加密类,使用方便快捷。当然加密的key非常规律,如果想改可以修改key变为复杂的key。

撸代码先:首先由一个加密类DES.class

需要导入的类如下:

import java.nio.charset.Charset;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

 类及方法:

public class DES
{
    //中文也是可以加密的,所以规定解密后的字符编码为UTF-8.
    private static String DEFAULT_CHARSET = "UTF-8";
    /**
     * 
     * @Title: encript
     * @Description: DES加密
     * @param @param org
     * @return byte[] 返回类型
     * @throws
     */
    public String encript(String org)
    {
        byte[] destBytes = null;

        byte[] orgBytes = org.getBytes(Charset.forName(DEFAULT_CHARSET));

        try
        {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            DESKeySpec dks = new DESKeySpec(this.getKey());
            SecretKeyFactory keyFactory;
            keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey securekey = keyFactory.generateSecret(dks);

            // Cipher ciper = Cipher.getInstance("DES/CBC/NOPadding");
            Cipher ciper = Cipher.getInstance("DES");

            // ciper.init(Cipher.ENCRYPT_MODE, securekey, new
            // IvParameterSpec(this
            // .getIV()));
            ciper.init(Cipher.ENCRYPT_MODE, securekey, sr);

            destBytes = ciper.doFinal(orgBytes);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        String dest = bytesToHexString(destBytes);
        return dest;
    }

    /**
     * 
     * @Title: decript
     * @Description: DES解密
     * @param @param org
     * @return String 返回类型
     * @throws
     */
    public String decript(String org)
    {
        byte[] destBytes = null;

        byte[] orgBytes = hexStringToBytes(org);

        try
        {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();

            DESKeySpec dks = new DESKeySpec(this.getKey());
            SecretKeyFactory keyFactory;
            keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey securekey = keyFactory.generateSecret(dks);

            // Cipher ciper = Cipher.getInstance("DES/CBC/NOPadding");
            Cipher ciper = Cipher.getInstance("DES");

            // ciper.init(Cipher.ENCRYPT_MODE, securekey, new
            // IvParameterSpec(this
            // .getIV()));
            ciper.init(Cipher.DECRYPT_MODE, securekey, sr);

            destBytes = ciper.doFinal(orgBytes);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        String dest = new String(destBytes, Charset.forName(DEFAULT_CHARSET));

        return dest;
    }

    /**
     * 
     * @Title: getKey
     * @Description: 获取密钥(16位)
     * @return byte[] 返回类型
     * @throws
     */
    private byte[] getKey()
    {
        // 固定密钥
        String key = "12345678abcdefgh";
        return key.getBytes(Charset.forName(DEFAULT_CHARSET));
    }

    /**
     * 
     * @Title: getIV
     * @Description: 获取初始向量(8位),取key的前8位,不足补0
     * @return byte[] 返回类型
     * @throws
     */
    public byte[] getIV()
    {
        byte[] key = this.getKey();
        byte[] iv = new byte[8];
        System.arraycopy(key, 0, iv, 0, 8);

        System.out.println("iv :" + iv);

        return iv;
    }

    /**
     * 
     * @Title: bytesToHexString
     * @Description: byte[]转十六进制字符串
     * @param @param src
     * @return String 返回类型
     * @throws
     */
    public String bytesToHexString(byte[] src)
    {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0)
        {
            return null;
        }
        for (int i = 0; i < src.length; i++)
        {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2)
            {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * 
     * @Title: hexStringToBytes
     * @Description: 十六进制字符串转byte[]
     * @param @param hexString
     * @return byte[] 返回类型
     * @throws
     */
    public byte[] hexStringToBytes(String hexString)
    {
        if (hexString == null || hexString.equals(""))
        {
            return null;
        }
        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] dest = new byte[length];
        for (int i = 0; i < length; i++)
        {
            int pos = i * 2;
            dest[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
        }
        return dest;
    }

    /**
     * 
     * @Title: charToByte
     * @Description: char转byte
     * @param @param c
     * @return byte 返回类型
     * @throws
     */
    private byte charToByte(char c)
    {
        int index = "0123456789ABCDEF".indexOf(c);
        if (index == -1)
        {
            index = "0123456789abcdef".indexOf(c);
        }
        return (byte) index;
    }

    /**
     * 
     * @Title: printHexString
     * @Description: 将指定byte数组以16进制的形式打印到控制台
     * @return void 返回类型
     * @throws
     */
    public void printHexString(byte[] bytes)
    {
        for (int i = 0; i < bytes.length; i++)
        {
            String hex = Integer.toHexString(bytes[i] & 0xFF);
            if (hex.length() == 1)
            {
                hex = '0' + hex;
            }
            System.out.print(hex.toUpperCase());
        }
    }

    public static void main(String arg[])
    {
        DES des = new DES();
        String testOrg = "我是中国人!123dfasdf ";

        // DES 加密
        String encript = des.encript(testOrg);
        System.out.println("encript data: " + encript);

        // DES 解密
        String decript = des.decript(encript);
        System.out.println("decript data: " + decript);

        // Base64 加密
        byte[] base64Encript = Base64.encode(testOrg.getBytes(Charset
                .forName(DEFAULT_CHARSET)), Base64.DEFAULT);
        System.out.println("base64 encript:"
                + new String(base64Encript, Charset.forName(DEFAULT_CHARSET)));

        // Base64 解密
        byte[] base64Decript = Base64.decode(base64Encript, Base64.DEFAULT);
        System.out.println("base64 decript:"
                + new String(base64Decript, Charset.forName(DEFAULT_CHARSET)));
    }

}

猜你喜欢

转载自dreammoon.iteye.com/blog/2223693