关于hash(一):基本概念

1、什么Hash

在计算机科学中,hash是一种函数,该函数可以把任意长度的输入转换为固定长度的输出,输出的结果称为hash值,通常为一个字符串,对于特定的hash算法输出结果的长度总是一定的,例如,不管是输入内容是长如小说般的内容还是一个字母,MD5总会产生32为长度的hash值。
hash函数的特点:
对于特定的hash算法输出结果的长度总是一定的;
对于相同的输入内容不管执行多少次hash函数,总会得到相同的hash值;
对于输入字符串哪怕及其微小的变动也会引起输出结果巨大的变化;
哈希过程是单向的,即不能通过特定的函数从hash值恢复出原始数据。

2、常见的hash算法

有很多广泛使用的hash算法,例如MD5、SHA1、SHA224、SHA256、SHA512等,一般编程语言中都提供的了常见的hash算法,如在python中:

import hashlib
hash = hashlib.md5(“Dataspace”.encode(‘utf-8’))
print(hash.hexdigest())

将会输出:

e2d48e7bc4413d04a4dcb1fe32c877f6

3、常见hash算法的应用场景

3.1 hash与密码

如果一个系统在数据库中直接保存了用户名和密码明文,那么一旦用户信息表泄露,捕获到信息的人就能使用任意账号登录系统;此时如果用户信息表中密码字段保存的是用户密码的hash值,即使该密码泄露,拿到该密码的人也并不能使用它来登录系统,因此给密码进行hash处理,会在一定程度上增加用户的安全性,注意,这种安全性并不是绝对的,因为hash过程虽然是不可逆的,但却可以被破解,因为这个世界上早有人搜集了不计其数的明文以及对应的hash值,放在数据库中,并以网站的形式对外提供服务,如https://cmd5.com/
对密码更为安全的处理形式将会另行展开论述。

3.2 对抗计算机病毒

当发布出去的计算机程序感染病毒时,执行该程序可能会引起一些严重的后果, 那么如何保证用户执行的程序是开发者“真正”发布的程序呢?使用hash算法就是起到防范病毒的作用。具体来说就是,当发布程序时,会以程序为输入使用hash算法得到一个hash值,然后将程序和该hash值一并分发给用户,用户以得到的程序作为输入,执行指定的hash算法,也会得到一个hash值,如果用户执行出来的hash值与程序发布者发布的hash值一致说明程序未被篡改。

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git介绍及基本概念 1. 分布式版本控制系统 Git是一个分布式版本控制系统,每个本地保留远程仓库的完整副本,在本地可以进行任何版本控制操作,比如修改,提交,创建分支,合并分支,回退等。需要时才推送到远程仓库。 2. Git文件保存 Git对每次提交,有变化的文件都会整个文件存储起来,而不是像其它版本控制系统,比如cvs,svn,perforce等存储的是文件的差异部分。但是git有package机制,适当的时候会自动运行git gc命令(也可以手动运行)对文件进行差异存储。当然为了节约空间,也会进行压缩。这种方式在分支方面会带来很大的好处,Git的分支,其实本质上仅仅是指向提交对象的可变指针。 3. Git对数据的引用 Git中所有数据,包括提交,目录,文件等,在存储前都计算校验和,然后以校验和来引用,这个校验和相当于指针。Git用以计算校验和的机制叫做 SHA-1 散列(hash,哈希),这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373。 4. Git对象 Git有4种对象,blob对象(通常是文件),树(tree)对象(通常是目录),提交(commit)对象和标签(tag)对象。当使用 git commit 进行提交操作时,Git会先计算每一个文件的校验和,在Git仓库中保存为blob对象,然后计算每一个子目录的校验和,保存为树对象,随后,Git便会创建一个提交对象,它包含提交信息(比如提交者名字,邮件,提交时间等),指向这个树对象(项目根目录)的指针和父提交对象(第一次提交无父提交对象)。如此一来,Git 就可以追踪任何对象。标签对象实际上是一个加了标签信息的提交对象,它像是一个永不移动的分支引用——永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值