算法的分类:
1.对称性加密算法:AES、DES
对称性加密算法就是加密方和解密方使用相同的密钥进行加密和解密。数据发送方通过
密钥对数据进行加密生成密文,发送给接送方,接收方收到密文数据后,通过密钥解密,将其恢复
成明文数据。
优点:对称加密算法算法计算量小,加密速度快,效率高。
缺点:密钥丢失,数据就不在安全。
2.散列算法:MD5、SHA1
散列算法,又称为哈希函数,是一种单向加密算法。对不同长度的输入数据,产生固定
的输出结果。
3.非对称算法:RSA、DSA
非对称加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为公钥和私钥,它们两个必须配对使用,否则不能够解密。
MD5、AES:
MD5是散列算法,是一种单向的加密算法,所以MD5不可逆。
1.添加MD5的相关依赖
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>5.0.2</version>
</dependency>
import com.jfinal.kit.HashKit;
public class MDAES {
public static void main(String[] args) {
String passwd="123456";
String md5 = HashKit.md5(passwd);
System.out.println(md5);
}
}
结果:e10adc3949ba59abbe56e057f20f883e
2.自定义工具类
AES是对称性加密算法,加密和解密使用相同的密钥,双向加密算法。
1.添加AES的相关依赖
2.编写工具类
public static byte[] decrypt(byte[] encrypted, byte[] aesKey){
try {
if(aesKey.length != 32){
throw new RuntimeException("IllegalAesKey, aesKey's length must be 32");
}
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES");
IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));
cipher.init(Cipher.DECRYPT_MODE, key_spec, iv);
return PKCS7Encoder.decode(cipher.doFinal(encrypted));
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
}
import com.jfinal.kit.AesKit;
import com.jfinal.kit.Base64Kit;
public class MDAES {
public static void main(String[] args) {
String passwd="123456";
String encode = Base64Kit.encode(AesKit.encrypt(passwd, "abcdabcdabcdabcdabcdabcdabcdabcd"));
System.out.println(encode);
String str = AesKit.decryptToStr(Base64Kit.decode(encode), "abcdabcdabcdabcdabcdabcdabcdabcd");
System.out.println(str);
}
}
结果:22zt5VKP0fOlpQA4QWFXGEoFhfJr4WpvvDm6H82c3HA=
123456