hashlib-sha摘要算法模块

摘要:hashlib:

摘要算法的模块

用处:
  1、查看某两个文件是否完全一致
    "abcdefggg"
    "abcdefhhg"
  2、加密认证
    把密码加密后写入文件
    (发生任何变化 都不行)

模块:
  1、md5
  2、sha sha256 sha512 等等

简单示例:

import hashlib      #导入模块

obj = hashlib.md5('字符串')             #创建md5类的对象         (加盐:静态和动态)   
obj.update(b"对比内容,或 加密内容")      #传入数据   bytes 类型   bytes()
a = obj.hexdigest()                 #对比的结果
print(a)                                #打印,写入文件 等等操作

校验两个字符串是否一致:

import hashlib
md5_obj1 = hashlib.md5()
md5_obj1.update(b'How are you?')        #b"" 转换成bytes 类型  
a = md5_obj1.hexdigest()            #hexdigest  找摘要算法要结果
print(a)
#04e35eb3e4fcb8b395191053c359ca0e
md5_obj2 = hashlib.md5()
md5_obj2.update(b'How are')             #两个字符串不一样
b = md5_obj2.hexdigest()
print(b)                                            #打印摘要算法 的结果
# 699f3620f6b19226ec27865572f7b704
print(a == b)           #md5 也不一样
#False                  #文章校对(是否完全一致),密码校验 等等

一篇文章的校验:

  md5_obj.update()
  支持多行,校验文件的时候,分别读取2个文件,一行一行读,每一行update一下
  对比最终的hexdigest()

import hashlib
md5_obj1 = hashlib.md5()
md5_obj2 = hashlib.md5()
with open('name','r',encoding='utf-8') as f,\
    open('文件','r',encoding='utf-8') as f1:
    for line in f:
        md5_obj1.update(bytes(line,encoding='utf-8'))
    for line1 in f1:
        md5_obj2.update(bytes(line1,encoding='utf-8'))      #update() 累加
a = md5_obj1.hexdigest()
b = md5_obj2.hexdigest()
print(a == b)                       #   对比最终的 hexdigest()
#True 或 False

import hashlib
md5_obj1 = hashlib.md5()
md5_obj2 = hashlib.md5()
with open('name','rb') as f,\                   #直接用 "rb" 模式打开 , 不用 encoding='utf-8' 编码
    open('文件','rb') as f1:
    for line in f:
        md5_obj1.update(bytes(line))
    for line1 in f1:
        md5_obj2.update(bytes(line1))
a = md5_obj1.hexdigest()
b = md5_obj2.hexdigest()
print(a == b)

密码加密:

import hashlib
md5_obj = hashlib.md5()
md5_obj.update(b'123456789')    # 密码
a = md5_obj.hexdigest()
print(type(a))
with open('name','w') as f:
    # f.write(bytes(a,encoding='utf-8'))            #'wb' 模式打开 , 要转成 bytes类型
    f.write(a)

如果只是简单的加密,可以暴力破解:撞库

  http://www.cmd5.com/ 一个在线md5 破解网站

  撞库: 暴力破解密码

加盐: 为客户加字符串(有的客户密码太简单,主动弄复杂)

分为静态加盐和动态加盐

静态加盐:

import hashlib
md5_obj = hashlib.md5('fdfdf@#$'.encode('utf-8'))           # 给下面的密码加上一些字符串
md5_obj.update(b'123456789')    # 密码
a = md5_obj.hexdigest()
print(a)
e8d298f03f7b6b0ce169ba30729a19e5

动态加盐:

md5_obj = hashlib.md5('用户名 + @#@df +密码'.encode('utf-8'))  

sha:

也是个算法

sha 和 hsshlib 一样

sha:
  1.sha
  2.sha256
  3.sha512
  4.....

256,512,字节数越多, 运行速度越慢,,安全性更高

 

  小结:

1、摘要的过程不可逆
2、能做的事:
  文件的一致性检测
  用户的加密认证:
    单纯的md5不够安全
    静态加盐: 简单的盐可能被破解,且破解之后所有的盐都失效了
    动态加盐:动态的

 

posted @ 2017-10-20 17:24  静静别跑  阅读(178)  评论(0编辑  收藏  举报