【知识储备】收藏一个加密解密算法

来源:互联网 发布:sewise.player.min.js 编辑:程序博客网 时间:2024/05/16 01:50
package com.lihan;import java.security.*;import javax.crypto.*;import javax.crypto.spec.SecretKeySpec;public class Test {    private static final String Algorithm = "DESede"; // 定义 加密算法,可用                                                        // DES,DESede,Blowfish    // keybyte为加密密钥,长度为24字节    // src为被加密的数据缓冲区(源)    public static byte[] encryptMode(byte[] keybyte, byte[] src) {        try {            // 生成密钥            SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);            // 加密            Cipher c1 = Cipher.getInstance(Algorithm);            c1.init(Cipher.ENCRYPT_MODE, deskey);            return c1.doFinal(src);        }        catch (java.security.NoSuchAlgorithmException e1) {            e1.printStackTrace();        }        catch (javax.crypto.NoSuchPaddingException e2) {            e2.printStackTrace();        }        catch (java.lang.Exception e3) {            e3.printStackTrace();        }        return null;    }    // keybyte为加密密钥,长度为24字节    // src为加密后的缓冲区    public static byte[] decryptMode(byte[] keybyte, byte[] src) {        try {            // 生成密钥            SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);            // 解密            Cipher c1 = Cipher.getInstance(Algorithm);            c1.init(Cipher.DECRYPT_MODE, deskey);            return c1.doFinal(src);        }        catch (java.security.NoSuchAlgorithmException e1) {            e1.printStackTrace();        }        catch (javax.crypto.NoSuchPaddingException e2) {            e2.printStackTrace();        }        catch (java.lang.Exception e3) {            e3.printStackTrace();        }        return null;    }    // 转换成十六进制字符串    public static String byte2hex(byte[] b) {        String hs = "";        String stmp = "";        for (int n = 0; n < b.length; n++) {            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));            if (stmp.length() == 1)                hs = hs + "0" + stmp;            else                hs = hs + stmp;            if (n < b.length - 1)                hs = hs + ":";        }        return hs.toUpperCase();    }    public static void main(String[] args) {        // 添加新安全算法,如果用JCE就要把它添加进去        Security.addProvider(new com.sun.crypto.provider.SunJCE());        final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10,                0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD,                0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36,                (byte) 0xE2 }; // 24字节的密钥        String szSrc = "This is a 3DES test. 测试";        System.out.println("加密前的字符串:" + szSrc);        byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());        System.out.println("加密后的字符串:" + new String(encoded));        byte[] srcBytes = decryptMode(keyBytes, encoded);        System.out.println("解密后的字符串:" + (new String(srcBytes)));    }}

运行情况:

加密前的字符串:This is a 3DES test. 测试
加密后的字符串:F?.l^趹B浊2椰兴嬂璟∫葯虝尔暟?
解密后的字符串:This is a 3DES test. 测试


转载自:http://blog.csdn.net/lihan6415151528/article/details/3742396
原创粉丝点击