目录
一、什么是MD5加密?
MD5(全称是message-digestalgorithmd5)一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5加密是一种单向的不可逆的加密算法,不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。
二、为什么使用MD5加密
在存储一些敏感的信息的时候,如果不进行加密则容易出现安全问题。例如:用户存储的密码,如果数据中的密码采用明文,一旦数据库泄露,则用户密码直接泄露。但是使用MD5加密算法之后即使数据泄露,这些密码也无法破解,保证了数据的安全性。
三、什么是AES加密
与MD5不同,AES加密是双向加密,双向加密是可逆的,存在密文的密钥,AES是高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,目前已经被全世界广泛使用,同时AES已经成为对称密钥加密中最流行的算法之一。AES支持三种长度的密钥:128位,192位,256位。
四、为什么使用AES加密
在项目中,某些敏感信息需要进行传递但为了数据的安全性这些值不可以直接暴露在外,就需要用到双向加密,而AES在世界范围内是最流行的算法之一,只有通过密钥才能解密,而密钥一定不会随意外传,保证了数据的安全性。
五、在Jfinal中如何使用两种加密?
如下所示:这是在Jfinal中的MD5的加密方式:
package com.my.test;
import com.jfinal.kit.HashKit;
public class Test {
public static void main(String[] args) {
String md5 = HashKit.md5("123456");
System.out.println(md5);
}
}
加密结果:
使用AES加密时需要密钥(密钥一定是32位):
package com.my.test;
import com.jfinal.kit.AesKit;
import com.jfinal.kit.Base64Kit;
public class Test {
// 32位长度秘钥
private static final String AEC_KEY = "1234567890abcdef1234567890abcdef";
public static void main(String[] args) {
//加密
String str = "123456";
byte[] bs = AesKit.encrypt(str,AEC_KEY);
String encode = Base64Kit.encode(bs);
System.out.println("加密后:"+encode);
//解密
byte[] decode = Base64Kit.decode(encode);
String decryptToStr = AesKit.decryptToStr(decode, AEC_KEY);
System.out.println("解密后:"+decryptToStr);
}
}
结果: