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使用较为广泛,但简单密码容易被碰撞破解。