java AES加密解密

近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。

因为在做接口 webservice的时候接受穿过的数据 是xml 加密为二进制 byte[]   下面直接看代码 :


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 AESUtil1 {




/*


* 算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度


* AES/CBC/NoPadding 16 不支持


* AES/CBC/PKCS5Padding 32 16


* AES/CBC/ISO10126Padding 32 16


* AES/CFB/NoPadding 16 原始数据长度


* AES/CFB/PKCS5Padding 32 16


* AES/CFB/ISO10126Padding 32 16


* AES/ECB/NoPadding 16 不支持


* AES/ECB/PKCS5Padding 32 16


* AES/ECB/ISO10126Padding 32 16


* AES/OFB/NoPadding 16 原始数据长度


* AES/OFB/PKCS5Padding 32 16


* AES/OFB/ISO10126Padding 32 16


* AES/PCBC/NoPadding 16 不支持


* AES/PCBC/PKCS5Padding 32 16


* AES/PCBC/ISO10126Padding 32 16


*


* 注:


* 1、JCE中AES支持五中模式:CBC,CFB,ECB,OFB,PCBC;支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding。 不带模式和填充来获取AES算法的时候,其默认使用ECB/PKCS5Padding。


* 2、Java支持的密钥长度:keysize must be equal to 128, 192 or 256


* 3、Java默认限制使用大于128的密钥加密(解密不受限制),报错信息:java.security.InvalidKeyException: Illegal key size or default parameters


* 4、下载并安装JCE Policy文件即可突破128密钥长度的限制:覆盖jre\lib\security目录下local_policy.jar、US_export_policy.jar文件即可


* 5、除ECB外,需提供初始向量(IV),如:Cipher.init(opmode, key, new IvParameterSpec(iv)), 且IV length: must be 16 bytes long


*/






public static SecretKeySpec bulidKey(String password) throws NoSuchAlgorithmException {


KeyGenerator kgen = KeyGenerator.getInstance("AES");     //AES 加密  默认的是这种  ECB/PKCS5Padding


SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");    //SHA1PRANG 就是一种算法的名称    这里使用据说有补位的作用可以适应不同机器 所以要用就用着这一种


secureRandom.setSeed(password.getBytes());        //  根据种子password.getBytes() 获取随机值 可以单用     SecureRandom 继承 Random


kgen.init(128, secureRandom);


SecretKey secretKey = kgen.generateKey();               //下面就是生成加密的key了


byte[] enCodeFormat = secretKey.getEncoded();


SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");


return key;


}




/**


* 加密


*


* @param content


*            需要加密的内容


* @param password


*            加密密码


* @return


*/


public static byte[] encrypt(String content, String password) {


try {


SecretKeySpec key = bulidKey(password);


Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器


cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化




byte[] byteContent = content.getBytes("gbk");    //这里是应编码了 可以不写gbk 就是用的默认编码这样的话 下面的解密gbk 也要去掉


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;


}










//   进行加密 并返回16进制的内容


public static String encrypt2Str(String content, String password) {


return parseByte2HexStr(encrypt(content,password)); // 加密


}




/**


* 解密


*


* @param content


*            待解密内容


* @param password


*            解密密钥


* @return


*/


public static byte[] decrypt(byte[] content, String password) {


try {


SecretKeySpec key = bulidKey(password);


Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器


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;


}






public static String decryptString(byte[]content,String password) throws UnsupportedEncodingException {


return new String(decrypt(content,password),"gbk");






}














//将加密后的16进制 转化为二进制 再解密  并编码为字符串


public static String decryptStr(String content, String password) {


byte[] decryptFrom = parseHexStr2Byte(content);


byte[] decryptResult = decrypt(decryptFrom, password);


String result = "--";


try {


result = new String(decryptResult,"gbk");


} catch (UnsupportedEncodingException e) {


e.printStackTrace();


}


return result;


}




/**


* 将二进制转换成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;


}




public static void main(String[] args) throws UnsupportedEncodingException {


String content = "山东省济南市槐荫区中大办事处裕华里";


String password = "bc29c2f94e0e0355c346892a45bc2b42";


// 加密971436EC53EED78C0A942FCA7900E1E7F13527CB29268B9B52DA3A6C7F804C1825AF87A0B8F550DE09055D42BED07EB7:长度:96


System.out.println("加密前:" + content);


byte[] encryptResult = encrypt(content, password);


String encryptResultStr = parseByte2HexStr(encryptResult);




System.out.println("加密后:" + encryptResultStr+":长度:"+encryptResultStr.length());


// 解密


String decryptResult = decryptStr(encryptResultStr, password);


System.out.println("解密后:" + decryptResult);




//--------------------------------------




String aa=decryptString(encryptResult,password);


System.out.println("===直接接受过来的二进制数据解密:"+aa);




}


}

 
//第二种和第一种类似 加密方式由EBC 改成 CBC  增加了向量  每太明白可能就是增加复杂度吧  

//这个是写借口的时候 我用java 别人用的是别的语言 AES加密对应不上 别人提供的 如果没有汉字就对上了 ,有了汉字加密后的16进制也是不一样的
//想到的办法是用  URLEncorder.encode("汉字")  进行转码  或者这里面提供的把汉字转换为二进制

import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
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.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AESUtil2 {

    /*
     * 算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度
     * AES/CBC/NoPadding 16 不支持
     * AES/CBC/PKCS5Padding 32 16
     * AES/CBC/ISO10126Padding 32 16
     * AES/CFB/NoPadding 16 原始数据长度
     * AES/CFB/PKCS5Padding 32 16
     * AES/CFB/ISO10126Padding 32 16
     * AES/ECB/NoPadding 16 不支持
     * AES/ECB/PKCS5Padding 32 16
     * AES/ECB/ISO10126Padding 32 16
     * AES/OFB/NoPadding 16 原始数据长度
     * AES/OFB/PKCS5Padding 32 16
     * AES/OFB/ISO10126Padding 32 16
     * AES/PCBC/NoPadding 16 不支持
     * AES/PCBC/PKCS5Padding 32 16
     * AES/PCBC/ISO10126Padding 32 16
     *
     * 注:
     * 1、JCE中AES支持五中模式:CBC,CFB,ECB,OFB,PCBC;支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding。 不带模式和填充来获取AES算法的时候,其默认使用ECB/PKCS5Padding。
     * 2、Java支持的密钥长度:keysize must be equal to 128, 192 or 256
     * 3、Java默认限制使用大于128的密钥加密(解密不受限制),报错信息:java.security.InvalidKeyException: Illegal key size or default parameters
     * 4、下载并安装JCE Policy文件即可突破128密钥长度的限制:覆盖jre\lib\security目录下local_policy.jar、US_export_policy.jar文件即可
     * 5、除ECB外,需提供初始向量(IV),如:Cipher.init(opmode, key, new IvParameterSpec(iv)), 且IV length: must be 16 bytes long
     */
    private static String ALGORITHM = "AES";
    private static int keySize = 128;
    private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";

    public static SecretKeySpec bulidKey(String password) throws NoSuchAlgorithmException {
        KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM);
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
        secureRandom.setSeed(password.getBytes());
        kgen.init(keySize, secureRandom);
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
        return key;
    }

    /**
     * 加密
     *
     * @param content
     *            需要加密的内容
     * @param password
     *            加密密码
     * @return
     */
    public static byte[] encrypt(String content, String password) {
        try {
            SecretKeySpec key = bulidKey(password);
            String iv = "jssjbyfkzzxsyjcs";//初始化向量参数,AES 为16bytes. DES 为8bytes.
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());     //增加了向量 这就是上面一个不用的地方
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);// 创建密码器
            cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);// 初始化
            byte[] byteContent = content.getBytes("gbk");
            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();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 加密
     *
     * @param content
     *            需要加密的内容
     * @param password
     *            加密密码
     * @return
     */
    public static String encrypt2Str(String content, String password) {
            return parseByte2HexStr(encrypt(content,password)); // 加密
    }

    /**
     * 解密
     *
     * @param content
     *            待解密内容
     * @param password
     *            解密密钥
     * @return
     */
    public static byte[] decrypt(byte[] content, String password) {
        try {
            SecretKeySpec key = bulidKey(password);
            String iv = "jssjbyfkzzxsyjcs";//初始化向量参数,AES 为16bytes. DES 为8bytes.
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);// 创建密码器
            cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);// 初始化
            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();
        } catch (InvalidAlgorithmParameterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 解密
     *
     * @param content
     *            待解密内容
     * @param password
     *            解密密钥
     * @return
     */
    public static String decryptStr(String content, String password) {
        byte[] decryptFrom = parseHexStr2Byte(content);
        byte[] decryptResult = decrypt(decryptFrom, password);
        String result = "--";
        try {
            result = new String(decryptResult,"gbk");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 将二进制转换成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;
    }

    public static void main(String[] args) {
        String content = "山东省济南市槐荫区中大办事处裕华里";
        String password = "bc29c2f94e0e0355c346892a45bc2b42";
        // 加密971436EC53EED78C0A942FCA7900E1E7F13527CB29268B9B52DA3A6C7F804C1825AF87A0B8F550DE09055D42BED07EB7:长度:96
        System.out.println("加密前:" + content);
        byte[] encryptResult = encrypt(content, password);
        String encryptResultStr = parseByte2HexStr(encryptResult);
        System.out.println("加密后:" + encryptResultStr+":长度:"+encryptResultStr.length());
        // 解密
        String decryptResult = decryptStr(encryptResultStr, password);
        System.out.println("解密后:" + decryptResult);
    }
}

  

//第三种   就是key的生成不同了  不是用  SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); 她生成的

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class AESTest {

    public static void main(String args[]){
        System.out.println(System.getProperty("file.encoding"));
        String content = "123456781234567812345678";
        String password = "12345678";

        System.out.println("加密前" + content);
        byte[] encryptResult = encrypt(content, password,16);
        System.out.println("加密后的16进制" + parseByte2HexStr(encryptResult));

        byte[] decryptResult = decrypt(encryptResult,password,16);
        System.out.println("解密后" + new String(decryptResult));

    }

  //加密
    public static byte[] encrypt(String content, String password, int keySize) {
            try {
                SecretKeySpec key = new SecretKeySpec(ZeroPadding(password.getBytes(), keySize), "AES");
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                byte[] byteContent = content.getBytes();
                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 (IllegalBlockSizeException e) {
                    e.printStackTrace();
            } catch (BadPaddingException e) {
                    e.printStackTrace();
            }
            return null;
    }

 //解密
    public static byte[] decrypt(byte[] content, String password, int keySize) {
            try {
                SecretKeySpec key = new SecretKeySpec(ZeroPadding(password.getBytes(), keySize), "AES");
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                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进制转化为二进制
    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进制
    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;
    }

    //最上方key生成需要的东西 这里是种子一定补全到128位   在下面个例子 password密码就不能随便写 就是因为没有这个
    public static byte[] ZeroPadding(byte[] in,Integer blockSize){
        Integer copyLen = in.length;
        if (copyLen > blockSize) {
            copyLen = blockSize;
        }
        byte[] out = new byte[blockSize];
        System.arraycopy(in, 0, out, 0, copyLen);
        return out;
    }

}
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 AESTest {

    /**
     * 加密
     *
     * @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;
    }

    public static void main(String args[]) {

        String content = "te大st";
        String password = "12345678";
        // 加密
        System.out.println("加密前:" + content);
        byte[] encryptResult = encrypt(content, password);
        // 解密
        byte[] decryptResult = decrypt(encryptResult, password);
        System.out.println("解密后:" + new String(decryptResult));

    }

}

  

时间: 2024-11-05 13:28:01

java AES加密解密的相关文章

C# 实现 JAVA AES加密解密[原创]

以下是网上普遍能收到的JAVA AES加密解密方法. 因为里面用到了KeyGenerator 和 SecureRandom,但是.NET 里面没有这2个类.无法使用安全随机数生成KEY. 我们在接收JAVA发送的AES加密字符串后,在.NET没有对应的KeyGenerator 和 SecureRandom去生成AES 的 KEY值,导致无法直接解密. 1 import java.security.SecureRandom; 2 import java.util.Base64; 3 4 impor

java AES 加密解密工具(Advanced Encryption Standard)

1.通用方法 package com.qlkj.hzd.commom.utils; import javax.crypto.*; import java.io.UnsupportedEncodingException; import java.security.*; /** * RSA相关工具类 * * @author vampire * @date 2018/10/12 下午5:33 */ public class EncrypAES { //KeyGenerator 提供对称密钥生成器的功能

php与java通用AES加密解密算法

php与java通用AES加密解密算法 AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法. php版代码如下: <?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB; protected

Java 关于密码处理的工具类[MD5编码][AES加密/解密]

项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两类小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推回去的. MD5的方法是基于散列的.本身信息不全.理论上是不能还原成唯一字符串的. 网上所谓的解密,也只是拥有一个足够大的字典映射,将编码前的源字符和编码后的目标字符关联起来而已,大多数常见的还行,复杂点的估计就会话费很长时间,有兴趣的可以试试. 至于MD5的用法,在初次录入的时候

Aes 加密解密 java加密解密

使用AES加密解密代码详解 首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件 npm i crypto-js --save --save-exact npm install crypto-js java代码加密解密类 package com.telling.util.crypto; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.co

java使用AES加密解密 AES-128-ECB加密

http://www.cnblogs.com/chen-lhx/p/5817161.html ************************************************* import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ pub

JAVA中使用AES加密解密

技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info("[rsaTest获取请求:{}]", str); try { String encryptResult = AESUtil.encrypt(str, "123456"); log.info("[AES加密后的参数为:{}]", encryptResult

非对称技术栈实现AES加密解密

非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的,这就要求在前端和后端不同的技术栈上完成信息的加密解密.当然我们通常完成这样专业的功能都会考虑使用相应的框架或者程序库来完成功能,前端或者NodeJS平台通常是JavaScript语言,JavaScript主流的加密解密库分别是SjclJS和CryptoJS, 本文以CryptoJS为例进行讨论.另

AES加密解密&amp;amp;&amp;amp;SHA1、SHA加密&amp;amp;&amp;amp;MD5加密

AES加密解密 SHA1.SHA加密 MD5加密 二话不说立即附上代码: package com.luo.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.