hashlib

hashlib提供了常用的摘要算法:MD5, SHA1等等

摘要算法:也成哈希算法,散列算法。通过一个函数把任意长度的数据转换成一个长度固定的数据串。主要用在存储一些不能被修改和查看的数据。

如用户名和密码存储在数据库中,但是不能明文存储,通过摘要算法转换成一串数据,安全性比明文存储要好。

算法MD5:hashlib.md5(Bytes)

常用的摘要算法MD5, 输入的参数是Bytes类型,生成结果是固定的128bit, 通常用一个32位的16进制字符串表示

计算一个字符串的MD5值,传入string类型的参数

import hashlib

和直接传入Bytes参数效果一样

如果数据量很大,可以多次调用md5.update(), 效果一样

但是一定要注意,多次调用的时候,字符串分隔后中间的符号一定要保留,否则结果将会不一样,

如下面的例子中, ‘a’后面少了一个空格,结果相当于‘this is apassword’ 而不是‘this is a password’:

算法SHA1:hashlib.sha1(bytes),用法和MD5相同,生成160bit字节,通常用40位的16进制字符串表示

Hmac

Hmac算法:Keyed-Hashing for Message Authentication。通过一个标准算法,在计算哈希的过程中,把key混入计算过程中

hmac.new(key, message, digestmod='MD5')

key 和message都必须是Bytes类型

下面是分别用hashlib 和 hmac实现的密码验证:

用hashlib实现:

# _*_ coding:utf-8_*_
import hashlib, random def get_md5(s):
return hashlib.md5(s.encode('utf-8')).hexdigest() class User(object):
def __init__(self, username, password):
self.username = username
self.salt = ''.join([chr(random.randint(48, 122)) for i in range(20)])
self.password = get_md5(password + self.salt) db = {
'michael': User('michael', '123456'),
'bob': User('bob', 'abc999'),
'alice': User('alice', 'alice2008')
} def login(username, password):
user = db[username]
return user.password == get_md5(password + user.salt)
# user.password 里传入的参数是db里的password
# ==后面的get_md5里的password是用的login这里传入的password # 测试:
assert login('michael', '123456')
assert login('bob', 'abc999')
assert login('alice', 'alice2008')
assert not login('michael', '1234567')
assert not login('bob', '123456')
assert not login('alice', 'Alice2008')
print('ok')

用hmac实现

# _*_ coding:utf-8 _*_
import hmac, random def get_md5(key, s):
return hmac.new(key.encode('utf-8'), s.encode('utf-8'), 'MD5').hexdigest() class User(object):
def __init__(self, username, password):
self.username = username
self.key = ''.join([chr(random.randint(48, 122)) for i in range(20)])
self.password = get_md5(self.key, password) db = {
'michael': User('michael', '123456'),
'bob': User('bob', 'abc999'),
'alice': User('alice', 'alice2008')
} def login(username, password):
user = db[username]
return user.password == get_md5(user.key, password) # 测试:
assert login('michael', '123456')
assert login('bob', 'abc999')
assert login('alice', 'alice2008')
assert not login('michael', '1234567')
assert not login('bob', '123456')
assert not login('alice', 'Alice2008')
print('ok')

												

Python hashlib and hmac的更多相关文章

  1. python hashlib、hmac模块

    一.hashlib模块 import hashlib m = hashlib.md5() m.update(b"Hello") print(m.hexdigest()) m.upd ...

  2. Python hashlib、hmac加密模块

    #用于加密的相关操作,3.x里代替了md5模块和sha模块,主要提供sha1,sha224,sha256,sha384,sha512,md5算法 #sha2为主流加密算法,md5加密方式不如sha2 ...

  3. python 内置模块之hashlib、hmac、uuid

    一.hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的.但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性. sha算法比MD5 ...

  4. Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  5. python hashlib模块

    用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib m=hash ...

  6. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

  7. python hashlib模块学习

    目录 hashlib 模块 破解密码 hmac 模块 hashlib 模块 1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,我们原来接触的是计算机语言0和1然后转化成字符,而hashl ...

  8. python hashlib、configparse、logging

    一.hashlib 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等.     2.摘要算法 通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目 ...

  9. Python hashlib加密模块

    hashlib模块 简介: hashlib模块是一个提供了字符串加密功能的模块,包含MD5和SHA的加密算法.具体的加密支持有: MD5,sha1,sha224,sha256, sha384, sha ...

随机推荐

  1. springboot启动配置原理之二(运行run方法)

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); s ...

  2. 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  3. 数据的双向绑定 Angular JS之开端篇

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...

  4. vue和react全面对比(详解)

    vue和react对比(详解) 放两张图镇压小妖怪 本文先讲共同之处, 再分析区别 大纲在此: 共同点: a.都使用虚拟dom b.提供了响应式和组件化的视图组件 c.注意力集中保持在核心库,而将其他 ...

  5. two week summary

    from collections import Iteratorfrom collections import Iterabl dic = {'a':"a","91a&q ...

  6. 使用CURL进行模拟登录

    在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如file_get_contents)就无法做到了,我们可以利用PHP的CURL扩展库来进行模拟登录,下面给出代码示例: < ...

  7. 【阅读笔记】《C程序员 从校园到职场》第六章 配置文件,makefile 文件 (Part 2)

     Contents: 1.配置文件(通常以 ini 结尾) 2.makefile文件 (Linux) PS: 这篇文章的内容,不太理解. 一.配置文件 本文以一个实际的小软件为例,介绍了C语言中配置文 ...

  8. Edge 浏览器 调用

    ShellExecute(0, 'open', PChar('Microsoft-Edge:' + Edit1.Text), nil, nil, SW_SHOW);

  9. ionic框架使用步骤

    nodejs下载:https://npm.taobao.org/mirrors/node一.全局安装ionic: npm install -g cordova ionic 如果安装失败: npm in ...

  10. python读取与写入csv,txt格式文件

    python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...