Day 4-8 hashlib加密模块

 

HASH

Hash,通常翻译作“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫作预映射,pre-image),经过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间一般远小于输入的空间,不一样的输入可能会散列成相同的输出,而不可能从散列值来惟一的肯定输入值。算法

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。数据库

HASH主要用于信息安全领域中加密算法,他把一些不一样长度的信息转化成杂乱的128位的编码里,叫作HASH值.也能够说,hash就是找到一种数据内容和数据存放地址之间的映射关系安全

MD5

什么是MD5算法dom

MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被普遍使用的密码杂凑函数,能够产生出一个128位的散列值(hash value),用于确保信息传输完整一致。MD5的前身有MD二、MD3和MD4。函数

MD5功能网站

输入任意长度的信息,通过处理,输出为128位的信息(数字指纹);
不一样的输入获得的不一样的结果(惟一性);编码

MD5算法的特色加密

  1. 压缩性:任意长度的数据,算出的MD5值的长度都是固定的
  2. 容易计算:从原数据计算出MD5值很容易
  3. 抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大
  4. 强抗碰撞:已知原数据和MD5,想找到一个具备相同MD5值的数据(即伪造数据)是很是困难的。

MD5算法是否可逆?spa

MD5不可逆的缘由是其是一种散列函数,使用的是hash算法,在计算过程当中原文的部分信息是丢失了的。翻译

MD5用途

    1. 防止被篡改:

      • 好比发送一个电子文档,发送前,我先获得MD5的输出结果a。而后在对方收到电子文档后,对方也获得一个MD5的输出结果b。若是a与b同样就表明中途未被篡改。

      • 好比我提供文件下载,为了防止不法分子在安装程序中添加木马,我能够在网站上公布由安装文件获得的MD5输出结果。

      • SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

    2. 防止直接看到明文:

      • 如今不少网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子获得数据库的用户密码的MD5值,也没法知道用户的密码。(好比在UNIX系统中用户的密码就是以MD5(或其它相似的算法)经加密后存储在文件系统中。当用户登陆的时候,系统把用户输入的密码计算成MD5值,而后再去和保存在文件系统中的MD5值进行比较,进而肯定输入的密码是否正确。经过这样的步骤,系统在并不知道用户密码的明码的状况下就能够肯定用户登陆系统的合法性。这不但能够避免用户的密码被具备系统管理员权限的用户知道,并且还在必定程度上增长了密码被破解的难度。)
    3. 防止抵赖(数字签名):

      • 这须要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并作好记录。若之后A说这文件不是他写的,权威机构只需对此文件从新产生摘要信息,而后跟记录在册的摘要信息进行比对,相同的话,就证实是A写的了。这就是所谓的“数字签名”。

利用hashlib模块写一个md5加密的程序:

import hashlib,string,random

def make_md5(string):
    str = hashlib.md5()  #调用md5方法
    str.update(bytes(string,encoding="utf-8"))   #传入bytes类型的字符
    print(str.hexdigest())                      #输出加密后的字符
    with open("pwd.txt","a+",encoding="utf-8") as f:
        f.write(string + "-" + str.hexdigest() +"\n")

while True:
    username = input("请输入用户名:")
    # str = input("请输入要生成MD5的字符串:")
    make_md5(str)
相关文章
相关标签/搜索