JAVA实现AES和MD5加密

package test;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
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;

import sun.misc.BASE64Encoder;

public class Test {

    public static void main(String[] args) {
        BASE64Encoder encode = new BASE64Encoder();
        String a = encode.encode(aesEncrypt("123456","123456"));
        String b = encode.encode(md5Encrypt("123456"));
        System.out.println(a);
        System.out.println(a.length());
        System.out.println(b);
        System.out.println(b.length());
    }
    
    /** 
     * AES加密 
     *  
     * @param content 需要加密的内容 
     * @param password  加密密码 
     * @return 
     */  
    public static byte[] aesEncrypt(String content, String password) {  
        try {
            //获取AES密钥生成器
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            //使用用户提供的随机源初始化密钥生成器,密钥大小为128位。
            kgen.init(128, new SecureRandom(password.getBytes()));
            //生成密钥
            SecretKey secretKey = kgen.generateKey();
            //获取基本编码格式密钥,如果不支持编码则返回null
            byte[] enCodeFormat = secretKey.getEncoded();
            //根据给定的字节数组构造一个密钥
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            //创建密码器 
            Cipher cipher = Cipher.getInstance("AES");
            //使用UTF-8将加密内容编码为byte序列
            byte[] byteContent = content.getBytes("utf-8"); 
            //用密钥初始化此密码器为加密模式的常量
            cipher.init(Cipher.ENCRYPT_MODE, key);
            //按单部分操作加密数据并返回
            return cipher.doFinal(byteContent);  
        } 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;  
    }
    
    public static byte[] md5Encrypt(String str){
        try {
            MessageDigest digest = MessageDigest.getInstance("Md5");
            return digest.digest(str.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

MD5在论坛上、软件发布时经常用,是为了保证文件的正确性,防止一些人盗用程序,加些木马或者篡改版权,设计的一套验证系统。

AES又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

所以在网站进行密码加密的情况下推荐使用AES算法加密,虽然MD5使用较为广泛,但简单密码容易被碰撞破解。

原文地址:https://www.cnblogs.com/aotian/p/3830931.html