关于加密
1、加密了解
对称加密,应用较早的加密算法,具体就是数据发送方将明文(原始数据)和加密密钥一起经过加密处理后,使其编程机器复杂的加密密文发送出去。接收方则使用密钥和相同算法的逆算法才能对密文进行解密。
加密对象是二进制数据
关于加密的对称与否,就是对称加密是加密和解密都是使用相同的密钥,而非对称加密加密和解密时使用的密钥不一样。
2、加密和解密是否使用同一个密钥
对称加密:AES、DES,这两个是使用同一个密钥
//举例AES加密
输入要加密的str,输入密钥
这里new了一个Java的Cipher类,一般为了创建Cipher对象,会调用getInstance方法
/**使用AES对字符串加密
* @param str utf8编码的字符串
* @param key 密钥(16字节)
* @return 加密结果
* @throws Exception
*/
public static byte[] aesEncrypt(String str, String key) throws Exception {
if (str == null || key == null) return null;
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
return bytes;
}
非对称加密:RSA,加密和解密时使用的是不同的密钥,分为公钥和私钥,公钥可以公开,私钥自己保存。原理是利用两个大质数相乘十分容易,但是去对其进行因素分解则十分困难。所以可以将乘积作为密钥使用。
比如gitee,登录码云,配置的公钥是该账号、本地推送代码到码云时则用的是私钥加密
3、加密结果是否能被解密
可逆加密:
不可逆加密:数据经过算法运算后,都无法恢复原数据,除了用户,数据库管理人员都无法得知用户密码。
4、加盐
// 加盐: 在明文字符串中拼接 我们自己的字符串,然后加密
String pwd = member.getPassword()+".!#123abc";
member.setPassword(MD5.encrypt(pwd));
baseMapper.insert(member);