当前位置:首页 > 开发 > 编程语言 > 加密解密 > 正文

JAVA后台数据加密

发表于: 2015-07-02   作者:li370604005   来源:转载   浏览次数:
摘要: 给一个简单的加密类,使用方便快捷。当然加密的key非常规律,如果想改可以修改key变为复杂的key。 撸代码先:首先由一个加密类DES.class 需要导入的类如下: import java.nio.charset.Charset; import java.security.SecureRandom; import javax.crypto.Cipher; import javax

给一个简单的加密类,使用方便快捷。当然加密的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)));
    }

}

 

JAVA后台数据加密

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
rsa.js使用了http://www.ohdave.com/rsa/,页面需要引入: <script src="lib/rsa/BigInt.js">&
记录 一、java中的数据加密 Java提供的安全模型和API 加密基础知识 使用JAVA实现加密 二、Java提供
前段时间咱老大吩咐我写一个rsa前台加密到后台用java解密。(说实话这之前我还真没用过) 不过没办
事先可以从后台里面传输json数据 <!-- 后面主要是介绍js怎么处理json --> <!DOCTYPE HTML
本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。 BASE64编码算法不算是真正的加密算法。 MD5
本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。 BASE64编码算法不算是真正的加密算法。 MD5
本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。 BASE64编码算法不算是真正的加密算法。 MD5
select EncryptByPassPhrase('hksjlm',qlrmc)jmsj,* into jmqlr from qlr where qlbh in('520141112
--DROP CERTIFICATE qanholasCert --DROP DATABASE ENCRYPTION KEY --DROP MASTER KEY USE master G
获取【下载地址】 QQ: 313596790 【免费支持更新】 A 代码生成器(开发利器);全部是源码 增删改查的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号