JAVA实现AES和MD5加密

时间:2021-12-01 05:00:49
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使用较为广泛,但简单密码容易被碰撞破解。