Java实现消息摘要算法加密

消息摘要算法:

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

留坑待填

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值