哈希加密算法

本文介绍了哈希算法的基本概念,包括其特点(固定长度输出、唯一性等),展示了MD5和SHA-1的例子,并讨论了其在软件完整性检验和密码验证中的作用。同时,提到了彩虹表和加盐作为应对简单密码攻击的方法。
摘要由CSDN通过智能技术生成

·hash的介绍

一:hash的解释:

哈希算法是一种能将不同长度的内容转化为固定长度的输出的算法,也称摘要算法或者散列算法。

二:hash的特点:

1、不同的内容转化的长度固定

2、相同的内容转化的结果一定相同

3、不同的内容转化的结果基本不同

4、无法逆推导除原文

·hash冲突

由于可以进行hash加密的内容是无穷的,但是生成的hash数长度是固定的,所以可能出现不同的内容生成的哈希结果相同,这个现象称之为哈希冲突。

所以:输出的结果越长,碰撞越不容易发生,也就越安全。

·常见的hash算法

常见hash算法有 MD5, SHA1, SHA224, SHA256, SHA384, SHA512。

下面举两个例子说明这些算法的使用方法。

一:MD5

import java.security.MessageDigest;

public class main {
	public static void main(String[] args)  {
        MessageDigest md = MessageDigest.getInstance("MD5");
       
        md.update("Hello".getBytes("UTF-8"));
        md.update("World".getBytes("UTF-8"));
        
        byte[] results = md.digest(); 

        StringBuilder sb = new StringBuilder();
        for(byte bite : results) {
        	sb.append(String.format("%02x", bite));
        }
        
        System.out.println(sb.toString());
	}
}

二:SHA-1

这里只需要把MD5改成SHA-1即可。

import java.security.MessageDigest;

public class main {
	public static void main(String[] args)  {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
       
        md.update("Hello".getBytes("UTF-8"));
        md.update("World".getBytes("UTF-8"));
        
        byte[] results = md.digest(); 

        StringBuilder sb = new StringBuilder();
        for(byte bite : results) {
        	sb.append(String.format("%02x", bite));
        }
        
        System.out.println(sb.toString());
	}
}

·hash的作用

hash算法根据它的特点:相同的内容加密后的结果一定相同,可以用来进行检验。

有两个用途:

1、对下载软件的完整性进行检验

因为现在的盗版软件或者有毒软件很多,可以通过这种方式检查自己下载的软件是否是被修改过。

2、对账户密码进行检验

将密码存入时进行加密,防止被黑客盗取,然后在用户登录时将输入的密码进行加密,将加密的结果和数据库中存储的结果进行比较,就知道密码是否正确了。

彩虹表

但是,根据相同的内容加密后的结果一定相同的特性,也会衍生出一些问题。

由于大多数用户的密码相对简单,所以黑客可以根据一些常用密码,比如:"123456"等,穷举出他们对应的哈希加密结果,制作成表,这个表就是彩虹表。然后根据彩虹表进行对比,可以反推出简单常用的密码。

而应对的方式则是给每个密码添加随机数,称之为加盐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cu-Sn合金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值