MD5、SHA1、SHA256的简单讲解

简述:

最近在研究系统以及驱动,当下载比较大的文件时总会提供SHA1或者SHA256,下载结束后使用校验工具得到的值与它进行比对来判断下载是否成功。
在这里插入图片描述

使用工具校验

certutil -hashfile 文件名 sha1/sha256/md5

在这里插入图片描述

正文:

MD5、SHA1、SHA256这些都被称为 哈希函数或散列函数。这些算法的最大的特点是不可逆。也就是不能从结果值去推演出初始值。

运算过程:

这里举个简单例子来讲解一下为什么不可逆。假如我们要对 1234567890 这串字符进行哈希运算。

  1. 只取偶数位的值: 既得到 24680

  2. 对每个数字都进行+1, 得到 35791

  3. 然后只截取前面三位数字: 得到 357

从这个简单的运算后得到 357 的结果,很明显是不可能反推出我们初始值 1234567890 的(不可逆)

可以肯定的是按照这个运算过程 1234567890 得出的结果一定是 357。(结果位数固定)

但应该很多人都发现了一个问题,我只要保证前面三个偶数位的值是246,其他随便怎么变。它最终的结果都是357。

没错!!!

哈希函数都有这个特点,对不同的数据加密,一定会有产生相同结果的值,这个也被称为碰撞。

我们可以输入的数据是无穷的(不管图片、视频、文件、各种字符…在计算机里无非都是0和1罢了),而用几十位数值作为输出,那肯定是会有重复的结果。

对于我上面模拟的哈希函数,那碰撞性可就太大了。那么优化一下,我在第三步截取改为前面5位数字,那么碰撞性是不是变小了?

差异:

这也算是MD5、SHA1、SHA256之间最大的差别:

  • MD5的长度为(128 bit) 32个十六进制值

  • SHA1的长度为(160 bit) 40个十六进制值

  • SHA256的长度为(256 bit) 64个十六进制值

拓展:(4bit=1hex十六进制值,8bit=1Byte)

安全性: SHA256 > SHA1 > MD5

计算速度: MD5 > SHA1 > SHA256

当然它们的加密过程肯定是不一样,不然怎么可能产生不同的结果呢。不过总得来说它们三者的加密过程还是很相似的,换汤不换药。

哈希加密的运用场景:

1.存储用户密码

假设我们用某个软件,储存密码的时候都是明文。那么如果该软件的数据库被黑客入侵了或者有内鬼(终止交易)。那么我们的账号密码不是直接就暴露了?但是用了哈希加密就不一样。因为这个哈希值是不可逆的,即使密码被泄露,也不用担心我们实际的密码被人知道。

2.文件校验

下载某xx文件,假如服务器在国外速度特别慢,我们可能去找国内的一些网站下载。这有个风险,你怎么知道文件有没有被修改过?是不是加了个病毒木马?这里就可以用哈希值去校验,如果官网提供的值跟你运算出来的一样,则没有被修改过。

…(太多自己发挥想象力)

常见问题:
1.为什么有些网站可以解密MD5值?

实际上这并不是真正意义上的解密,而是把大家常用的语句、密码进行MD5加密把结果存储在数据库里。当你拿个MD5值去解密的时候,它就会去找数据库看看有没有这个值。如果有就给你返回结果,如果没有就解密失败。直白点说,你设置的密码太弱鸡了。
2.什么是加盐?

我的密码就爱设置为123456,怎么滴。不能为难用户,那就为难程序员。在MD5上加些其他的运算过程,比如得到最终结果的MD5以后,我把所有的A替换成F,1替换成9。那即使密码泄露了。因为不是最原始的MD5,即使是弱口令,不知道替换规则,那么也是破解不出来的。这种行为就被称为加盐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java swarm集群_52个Java程序员不可或缺的 Docker 工具

Docker工具分类列表编排和调度持续集成/持续部署(CI / CD)监控记录安全存储/卷管理联网服务发现构建管理编排和调度 1. KubernetesKubernetes是市场上最实用的最受欢迎的容器编排引擎。最初作为一个Google项目开始,成千上万的团队使用它来部署生产中的容器。谷歌声称…

centos7.4安装nginx1.8.1 php7.7.11 安装 MySQL5.7.20

解决依赖关系 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel nginx源码下载地址 http://nginx.org/download/ 解压 tar -zxvf nginx-1.8.1.tar.gz 进入目录 cd nginx-1.8.1 检测配置 ./configure --prefix/usr/local/nginx --sbin-path/usr/bin/n…

comsol显示电场计算结果_在 COMSOL 中构建磁流体动力学多物理场模型

COMSOL Multiphysics 软件中的模型都是从零开始构建的,软件支持多物理场,因此用户可以按照自己的意愿轻松地组合代表不同物理场现象的模型。有时这可以通过使用软件的内置功能来实现,但有些情况下,用户需要做一些额外的工作。我们…

数据挖掘初次接触!学习代码

import pandas as pd import numpy as np from time import timedatapd.read_csv("dankuan.csv",sep;,index_col0) #打开表 data.head() #查看前几行的数据,默认前5行 data.describe() #数据的快速统计汇总 data.g4_term_type.value_counts() data2data.fillna(value…

心率过100怎么处理_心跳每分钟超过100次,为何血压很正常?心跳太快该怎么办?...

在人们的心中一个人要是心跳速度很快,那么就意味着血压升高了。大家也知道正常情况下,每分钟心跳在55下到100下之间,都是正常情况。不过,现在有很多人心跳虽然很快,每分钟都超过100次了,但是一检查血压还是…

python卷子_Python试卷

3、写一个函数&#xff0c;计算一个给定的日期是该年的第几天。def getday(self,yNone,mNone,dNone):date datetime(y,m,d)days date.strftime(%j)return days4、写一个函数&#xff0c;给定N&#xff0c;返回斐波那契数列第N项。def getn_vlaue(self,n):if n<2:return 1e…

JS日期选择器

<html><head><title>JS日期选择器</title><script type"text/JavaScript">function HS_DateAdd(interval, number, date) {number parseInt(number);if (typeof (date) "string") {var date new Date(date.split("-…

微运行库2015_vc++2015运行库下载_vc++2015运行库64位官方下载「vc2015」-太平洋下载中心...

常见问答&#xff1a;(1)win10安装vc2015提示错误0x80070666如何解决&#xff1f;步骤&#xff1a;前提需要通过程序和功能 将旧版的vc 卸载1、首先下载"VC6.0垃圾文件清理工具"&#xff1b;2、将下载的到压缩包解压出来&#xff1b;3、打开文件夹&#xff0c;在Copy…

python爬silverlight_Python创建Silverlight控件编写过程经验分享

Python编程语言可以帮助我们实现哪些功能呢&#xff1f;它的主要应用范围都包括哪些呢&#xff1f;我们今天先来了解一下有关Python创建Silverlight控件的相关实现方法&#xff0c;以此来初步熟悉一下这一语言的应用方式以及功能特点。其实关注Silverlight很久了&#xff0c;只…

RGB转LAB色彩空间

https://www.cnblogs.com/hrlnw/p/4126017.html 1.原理 RGB无法直接转换成LAB&#xff0c;需要先转换成XYZ再转换成LAB&#xff0c;即&#xff1a;RGB——XYZ——LAB 因此转换公式分两部分&#xff1a; &#xff08;1&#xff09;RGB转XYZ 假设r,g,b为像素三个通道&#xff0c;…

fileitem方法_FileItem的常用方法

下面介绍FileItem类中的几个常用的方法&#xff1a;1. isFormField方法isFormField方法用于判断FileItem类对象封装的数据是否属于一个普通表单字段&#xff0c;还是属于一个文件表单字段&#xff0c;如果是普通表单字段则返回true&#xff0c;否则返回false。该方法的完整语法…

python hack库_常用的Python库

Tkinter———— Python默认的图形界面接口。Tkinter是一个和Tk接口的Python模块&#xff0c;Tkinter库提供了对Tk API的接口&#xff0c;它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言&#xff0c;用于简化shell下复…

Java异常介绍及Spring Boot统一异常处理

1. 异常介绍 Java异常处理是Java编程语言中用于处理程序运行时出现的异常情况的一种机制。异常情况指的是程序运行过程中出现的非正常情况&#xff0c;比如除以零、数组越界、空指针访问等。Java异常处理机制可以帮助程序员更好地管理这些异常情况&#xff0c;保证程序的稳定性…

React- jsx的使用可以渲染html标签 或React组件

React 的 JSX 使用大、小写的约定来区分本地组件的类和 HTML 标签。既渲染html标签需要使用小写字母开头的标签名而渲染本地React组件需要使用大写字母开头的标签名 注意: 由于 JSX 就是 JavaScript&#xff0c;一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代&…

bigdecimal保留4位小数_四年级数学小数的加减乘法知识点汇总,带练习!

张老师 - 4年级(多品小学教育)顺城中心小学郭老师和环县虎洞中心小学谭老师需要的这份学习资料现在分享。本资料已制作电子版下载码是&#xff1a;76qa32vd《小数的加减乘法》知识点一、小数加、减法的计算法则(1)小数点要对齐&#xff0c;也就是相同数位要对齐&#xff1b;相同…

python 字符串 4位一组_Python基础4- 字符串

Python字符串是由数字、字母、下划线组成的一串字符,我们可以使用引号来创建字符串。如:str Helloworld在Python中没有char类型,单个字符也作为string使用;Python的字符串列表有2种取值顺序&#xff1a;A.自左向右,默认索引从0开始,索引长度最长为字符串长度-1B.自右向左,默认…

学python编脚本_python 学习写脚本

学习python中&#xff0c;练手&#xff01;模拟注册登录的例子写的一个简单的脚本#!/usr/bin/env python#--coding: utf-8 --#如果需要开启输入密码不可见&#xff0c;请去掉所有含getpass的代码行的注释&#xff0c;并注释相关的行。此行为注释说明#import getpass#确认python…

毕业设计后续工作目标

周数 工作内容 10周 周一 1.需求调研模块&#xff1a;人员&#xff0c;设备&#xff0c;资金&#xff0c;日程的设置及进程管理 周二 1.需求分析和调研模块&#xff1a;完成用例图&#xff0c;交互图和用例文档的上传、查看及保存 周三 1.生成软件需求规格说明书&#…

vs未指定启动文件_高效开发利器之自定义模板文件

简介越来越多的设计模式, 最佳实践, 优化了软件开发方式, 提高了软件质量, 但是也带来了大量的类似的文件. 比如说: 现在都使用三层模式来开发Web程序, 都会有服务层(Service), DI的流行, 每个服务类都会自动注入一些固定的对象, 日志对象, 缓存对象等等. 实体类(Entity)到DTO对…

react-router 4.0 学习笔记

1、安装react-router-dom 2、页面上要使用的时候要引入  import {BrowserRouter as Router,Route,Link } from react-router-dom 3、使用的时候要在外层包一个<Router> 4、param 在路径上如果带有/:id类似这种的&#xff0c;要取值的时候&#xff0c;match.params.id取…