消息摘要

        消息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。 消息摘要可以用于判断两个文件是否一样,或者将明文密码加密成暗文,而且是无法解密的,有人说可以解密其实是将各种字符串的消息摘要存在Map中以消息摘要为键,字符串为值,当获取一个消息摘要是查询Map就可以了,对于这种情况我们可以在消息摘要的后面添加一个盐(就是在原字符串后面添加一个随意的字符串),以防止被人获取到真正的消息摘要。那么如何获取消息摘要呢,对于文件可以将消息摘要流套在文件的输入流,也可以套在文件输出流,当文件输入或输出完成后就可以获取该文件的消息摘要要了。

public static byte[] getMd5(String file) throws NoSuchAlgorithmException, IOException{
    	MessageDigest md5=MessageDigest.getInstance("MD5");
    	InputStream in=new DigestInputStream(
    			new BufferedInputStream(new FileInputStream(file)),md5
    			);
    	byte[]buffer=new byte[2*1024];
    	int b=-1;
    	while((b=in.read(buffer))!=-1);
    	in.close();
    	//获取消息摘要
    	return md5.digest();
    }


         MessageDigest 类为应用程序提供消息摘要算法的功能,如 MD5 或 SHA 算法。下载工具在下载文件是先下载该文件的消息摘要,下载玩文件后生成一个消息摘要,看两个消息摘要是否一样,若一样说明文件正确下载了,消息摘要不一样说明文件下载错误。

 /**
     * 获取一个字符串的消息摘要,可以应用到给密码加密,这个过程是单向的
     * @param str   被加密的字符串
     * @param salt
     * @return
     */
    public static byte[] getMd5(String str,String salt){
    	if(str==null){
    		throw new IllegalArgumentException("非法参数");
    	}
    	String s=salt==null?str:str+salt;
    	try {
    		byte[] data=s.getBytes("utf-8");//将字符串转化为utf-8编码的字节数组
			MessageDigest md5=MessageDigest.getInstance("MD5");
			md5.update(data);//提交数据
			//获取消息摘要
			return md5.digest();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			throw new RuntimeException("没有该加密类型");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			throw new RuntimeException("编码错误");
		}
    	
    }


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值