哈希算法及加密实现

本文介绍了哈希算法的基本概念、特点和常见类型,如MD5、SHA系列,探讨了哈希碰撞及其避免策略。文章详细展示了如何使用Java实现MD5、SHA-1、SHA-256等加密,并提到加盐策略以增强密码安全性,防止彩虹表攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

哈希算法被广泛运用在各种途径中,本文章将带你初步认识哈希算法及它的加密的实现操作效果。


一、哈希算法是什么?

哈希算法又称摘要算法(Disgest),一般指SHA家族,它是安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

哈希算法特点

  • 相同的输入一定得到相同的输出
  • 不同的输入大概率得到不同的输出
    因此,哈希算法的目的是验证原始数据是否被篡改
    我们可以调用java的hashCode方法验证
System.out.println("Hello Java".hashCode());// 387417328
System.out.println("Hello java".hashCode());// 388370640
System.out.println("Hello,bob".hashCode());//-1095500357

哈希碰撞

哈希碰撞是指两个不同的输入得到了相同的输出。
例如:

	String s1 = "通话";
	String s2 = "重地";
	System.out.println(s1.hashCode());// 1179395
	System.out.println(s2.hashCode());// 1179395

哈希碰撞是不能避免的,这是因为输出的字节长度是固定的,但输入的字节长度不固定,有无数种输入,所以哈希算法是把无数的输入集合映射到一个有限的输出集合里,必然会产生碰撞。
既然不能避免碰撞,我们就要想办法降低碰撞的概率,提高哈希算法的安全性,所以一个安全的哈希算法必须满足:

  • 碰撞概率低
  • 不能被预测输出

常用的哈希算法

算法 输出长度(位) 输出长度(字节)
MD5 128bits 16bytes
SHA-1 160bits 20bytes
RipeMD-160 160bits 20bytes
SHA-256 256bits 32bytes
SHA-512 512bits 64bytes

二、哈希算法对密码加密的实现

为什么要对密码加密储存呢?设想如果数据库中直接存入用户的密码,数据库一旦泄露,那用户的信息将暴露无遗。所以将密码加密后存入数据库,将用户密码加密后的信息与存入数据库的信息去比对验证,这样就算数据库泄露,加密后的密码并不能被直接用于登录。

1.MD5加密

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class Main {
   
   
	public static void main(String<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值