当前位置:   article > 正文

Hash(哈希)算法-Python实现_python计算哈希

python计算哈希
目录
  • * 算法介绍:
    
    • 1
    • Hash算法的计算方法 :
    • Hash算法的性质 :
    • Hash算法的用途:
    • 用python实现hash算法:
    • 密码加盐:
    •   * 代码实现:
      
      • 1

算法介绍:

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。
一般用于快速查找和加密算法

Hash算法的计算方法 :

用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对于检测数据对象(例如消息)中的修改很有用。此外,好的哈希算法使得构造两个相互独立且具有相同哈希的输入不能通过计算方法实现。
典型的哈希算法包括 MD2、MD4、MD5 和 SHA-1。

Hash算法的性质 :

  1. 单向性。即给定一个输入数,容易计算出它的哈希值,但是已知一个哈希值根据同样的算法不能得到原输入数。
  2. 弱抗碰撞性。即给定一个输入数,要找到另一个得到给定数的哈希值,在使用同一种方法时,在计算上不可行。
  3. 强抗碰撞性。即对于任意两个不同的输入数,根据同样的算法计算出相同的哈希值,在计算上不可行。
  4. 雪崩效应:当一个输入未发生变化时输出位将有一半发生变化。在这里插入图片描述

Hash算法的用途:

  1. 它可以检验信息是否是相同的,这样的优势是可以节省重复数据传送的时间。就像我们在一些网盘中上传的文件,如果文件内容相同的话,哪怕属于不同的用户,也可以通过对比哈希值避免向服务器重复上传相同的文件,可以很大程度上节约存储资源,提高存储效率。

我们在网上下载文件,在本地校验,以保证文件未被篡改:

import hashlib

with open("D:\python-3.11.1-amd64.exe", 'rb') as f:
    m1 = hashlib.md5(f.read())
    print('该文件校验值为:' + m1.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

![在这里插入图片描述](https://img-
blog.csdnimg.cn/1435ff21e43f471bbe4b47b4c1009d4e.png#pic_center)

![在这里插入图片描述](https://img-
blog.csdnimg.cn/8e00b1ab96324ab5b763d15207eb2387.png#pic_center)

  1. 除此之外,哈希算法也可以对网站注册用户的密码进行加密保护。

哈希算法不可逆,用于密文保存密码的签名,网站后台只保存签名值。 这样即使网站保存的信息被盗取,也无法获取用户的密码,具有更高的安全性。

![在这里插入图片描述](https://img-
blog.csdnimg.cn/b35eff300d8a451da7ba85552245a0fb.png#pic_center)

  1. 密码学 中,哈希算法的主要作用是用于消息摘要和签名,主要用于消息的完整性校验。

![在这里插入图片描述](https://img-
blog.csdnimg.cn/3577fc37813a4c64ae67b73f9f3e3fd6.jpeg#pic_center)

用python实现hash算法:

MD5:

import hashlib

h1 = hashlib.md5()
h1.update('helloworld'.encode('utf-8'))
print('md5:' + h1.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

SHA224:

import hashlib

h2 = hashlib.sha224()
h2.update('helloworld'.encode('utf-8'))
print('sha224:' + h2.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

SHA1:

import hashlib

h3 = hashlib.sha1()
h3.update('helloworld'.encode('utf-8'))
print('sha1:' + h3.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

SHA256:

import hashlib

h4 = hashlib.sha256()
h4.update('helloworld'.encode('utf-8'))
print('sha256:' + h4.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

SAH384:

import hashlib

h5 = hashlib.sha384()
h5.update('helloworld'.encode('utf-8'))
print('sha384:' + h5.hexdigest())
  • 1
  • 2
  • 3
  • 4
  • 5

![在这里插入图片描述](https://img-
blog.csdnimg.cn/ad84bafeda184ee0a8b088707a2d8f1d.png#pic_center)

密码加盐:

虽然哈希值是不可逆的,但我们可以通过哈希碰撞算出来密码是什么,这取决于算量,只要算量足够大,都能算出来。我们通常会将用户的密码进行 Hash
加密,如果不加盐,即使是两层的 md5 都有可能通过彩虹表的方式进行破译。彩虹表就是在网上搜集的各种字符组合的 Hash
加密结果。而加盐,就是人为的通过一组随机字符与用户原密码的组合形成一个新的字符,从而增加破译的难度。

代码实现:
import hashlib

# 密码加盐:
pwd = 'helloworld'

h1 = hashlib.md5()
h1.update('盐1'.encode('utf-8'))
h1.update(pwd.encode('utf-8'))
h1.update('盐2'.encode('utf-8'))
print('md5:' + h1.hexdigest())

# md5:ab46effd96a4873d6bfe9a465cedbb02
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

没有绝对安全的密码,我们仅可以通过这种方式去提高破解者的破解难度。只要算量足够大,密码破解只是时间问题

rot13-替换式密码

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/812112
推荐阅读
相关标签