消息摘要算法:
MD(Message Digest) 消息摘要
SHA(Secure Hash Algorithm) 安全散列
MAC(Message Authentication Code) 消息认证码
作用:(验证数据完整性、数字签名核心算法)
将输入的任意长度序列数据映射为128bit的输出序列,一般来说只要输入的内容不同,映射出来的序列就不相同,就可以用来验证数据的完整性。(比如从一个网站下载了一个文件,而这个网站又留下了该文件的消息摘要,我们只要计算下这个文件的消息摘要再和网站上的比对下,就可以知道这个文件是否下载完整。)还有一个功能就是数据的机密性,保存密码到数据库时,不直接保存密码的明文,而是保存密码的消息摘要,在验证密码的时候,将密码的消息摘要和保存在数据库内容进行比较,就可以检测密码的正确性,同时保证了机密性。
数据库明文存储密码的后果:CSDN网站六百万用户信息外泄、推特用户密码被明文泄漏
结合消息摘要算法的一种安全的登录验证方式:
消息摘要算法——MD
MD家族(128位摘要信息)(MD2、MD4、MD5)
Commons Codec & Bouncy Castle 下载
JDK实现:
package practice;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Hex;
public class MD5Test {
private static String str = "test text";
public static void main(String[] args) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5"); // 得到MD5的加密对象
byte[] strOut = md.digest(str.getBytes());
System.out.println(Hex.encodeHex(strOut)); // Hex由Commons Codec提供,将byte数组转为16进制
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
Bouncy Castle实现:
package practice;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.util.encoders.Hex;
public class MD5Test {
private static String str = "test text";
public static void main(String[] args) {
Digest digest = new MD5Digest();
digest.update(str.getBytes(), 0, str.getBytes().length); // 处理的数据、开始的位置、处理的长度
byte[] md5Bytes = new byte[digest.getDigestSize()];
digest.doFinal(md5Bytes, 0); // 输出内容和偏移量
System.out.println(Hex.toHexString(md5Bytes)); // Hex由BouncyCastle提供
}
}
Commons Codec实现:
package practice;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Test {
private static String str = "test text";
public static void main(String[] args) {
System.out.println(DigestUtils.md5Hex(str.getBytes()));
}
}
有没有通过上述程序发现MD5 加密之后的长度是一样的,不管原本的信息有多长?这是因为 MD5 是摘要算法,有点类似于从你要加密的信息中选取一部分信息出来加密,所以即使你得到了 MD5 加密之后的结果,也很难从一部分信息中反推出原本的完整信息。另外,MD5 也是存在被破解的情况,那就是最传统的破解方法,从一堆数据中一个个去试。所以, MD5 可以设置一个盐值,类似于干扰信息,可以降低被破解的概率。
消息摘要算法——SHA
留坑待填
消息摘要算法——MAC
留坑待填