加密方式种类:
对称加密:简单例子理解,一个明文变量a经过密钥x处理,变成了b,然后b经过密钥x处理又变成a。就是说加密和解密的密钥是一样的,都是x。称之为对称加密
非对称加密:公钥,所有人都可以拥有,对外公开。密钥,只有自己拥有,不公开。简单例子理解,明文变量a经过公钥x处理变成了非明文变量b,这时如果还用公钥x对非明文b进行处理得不到明文a,只有用密钥y对b进行处理才能得到a。对a进行密钥y处理变成b,b可以用公钥x解密变成a。这种属于单方向保密。因为解密和加密的密钥不一样,所以叫非对称加密。
摘要算法:明文a经过算法处理变成一个定长的不可逆的字符串。代表有:MD5,SHA-1
盐:就是一个用来捣乱的字符串。例子:比如明文“abc”加密之后会变成“0q1w2e3r4t5y”(只是例子不用在乎长度),但是因为同一个明文的加密后的样子总是不变的,所以如果有人一个一个试就会知道密码是多少,俗称暴力破解。如果我们在abc后面加上一个def111222这样的字符串,那么破解的难度就增加了,而且就算破解了,也不是正确的明文了,这个def111222就是盐。这个盐只有我们自己知道,写在程序里面,黑客一般是通过网关或者盗用数据库,所以就很难得到盐是多少,就算反向破解,也还有盐来扰乱视听。
下面贡献一个md5破解的网站,有兴趣可以试一下,挺好玩的(可以加密,也可以解密)
https://www.cmd5.com/
另外两种加密:数字签名和数字证书(概念自己百度)
MD5加密教程
前端
下载一个md5.js
引入js
使用hex_md5方法:var 加密后的值 = hex_md5("你的明文")
java
方法一:参考地址:https://www.jb51.net/article/86027.htm
/**
* 对字符串md5加密
*
* @param str
* @return
*/
import java.security.MessageDigest;
public static String getMD5(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
throw new SpeedException("MD5加密出现错误");
}
}
方法二:
参考地址:https://www.cnblogs.com/Marydon20170307/p/9116924.html