博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hashlib模块
阅读量:6651 次
发布时间:2019-06-25

本文共 2844 字,大约阅读时间需要 9 分钟。

1.加密算法介绍

1.1hash

Hash一般翻译为“散列”,或“哈希”,是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,即散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不能根据散列值来唯一确定输入值。

简单的说是一种将任意长度的消息压缩成固定长度的消息的一种函数。
hash主要用于安全领域中加密算法,他把不同长度的信息转换成杂乱的128位的编码,这个128位的编码就叫HASH值。

  • hash值在当前程序下是唯一的,退出了就变了
>>> hash("123")4880615334525398789>>> hash("123")4880615334525398789>>> quit()(venvP3) E:\PythonProject\python-test\BasicGrammer>python3Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> hash("123")-5768810267372332319>>> hash("123")-5768810267372332319>>>
  • md5值只要输入时相同的,输出的md5值就是相同的,不管是否退出程序

1.2md5算法

1.2.1md5算法解析

MD5讯息摘要算法(Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位的散列值,用于确保信息传输完整一致。MD5之前有MD2,MD3,MD4

1.2.2md5功能

输入任意长度的信息,经过处理,输出为128位的信息(数字指纹),不同的输入得到不同的结果(结果具有唯一性)

1.2.3md5算法的特点

1.压缩性:任意长度的数据,算出的MD5值的长度都是固定的。

2.容易计算:从原数据计算出MD5值很容易
3.抗修改性:对原数据进行任何改动,生成的MD5值区别都会很大
4.强抗碰撞:已知原数据和MD5,想要找到一个具有相同MD5值的数据是几乎不可能的

1.2.4md5是否可逆

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

1.2.5md5用途

1.防止篡改

2.防止看到明文
3.防止抵赖(数字签名)

2.python中hashlib

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author: vitaimport hashlibm = hashlib.md5()m.update(b"Hello")m.update(b"It's me")print(m.digest())m.update(b"It's been a long time since last time we ...")print(m.digest()) #2进制格式hashprint(len(m.hexdigest())) #16进制格式hashE:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.pyb'{}\xd6Rz\xd4\x01\x05mJT\xbe\xb3m\x1eF'b'\xc7~\xe3BD\xd6#\x10\x06\xcf\x96M\x98\xe9\xec\x96'32Process finished with exit code 0#!/usr/bin/env python# -*- coding:utf-8 -*-# Author: vitaimport hashlib#########md5############md5 = hashlib.md5()md5.update("admin".encode("utf-8"))print("md5:",md5.hexdigest())#########sha1############sha1 = hashlib.sha1()sha1.update("admin".encode("utf-8"))print("sha1:",sha1.hexdigest())#########sha256############sha256 = hashlib.sha256()sha256.update("admin".encode("utf-8"))print("sha256:",sha256.hexdigest())#########sha384############sha384 = hashlib.sha384()sha384.update("admin".encode("utf-8"))print("sha384:",sha384.hexdigest())#########sha512############sha512 = hashlib.sha512()sha512.update("admin".encode("utf-8"))print("sha512:",sha512.hexdigest())E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.pymd5: 21232f297a57a5a743894a0e4a801fc3sha1: d033e22ae348aeb5660fc2140aec35850c4da997sha256: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918sha384: 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782sha512: c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ecProcess finished with exit code 0

转载于:https://blog.51cto.com/10983441/2389841

你可能感兴趣的文章
springMVC拦截器和过滤器总结
查看>>
CDH版本的oozie安装执行bin/oozie-setup.sh prepare-war,没生成oozie.war?
查看>>
perl 中的哈希赋值
查看>>
COCOS2D-X暂时设置竖屏,过一阵子再设置回横屏
查看>>
[Java]线程池
查看>>
Server Tomcat v7.0 Server at libra failed to start
查看>>
Java多线程(八)——join()
查看>>
HDOJ 题目3308 LCIS(线段树,区间查询,区间合并)
查看>>
Linux 设备驱动--- Poll 方法 --- Select【转】
查看>>
基于V4L2的视频驱动开发【转】
查看>>
手动操作导航控制器的子视图控制器的数组
查看>>
Spring 3整合Quartz 2实现手动设置定时任务:新增,修改,删除,暂停和恢复
查看>>
Lintcode---二叉树的锯齿形层次遍历
查看>>
Leetcode题解(5):L58/Length of Last Word
查看>>
金蝶KIS问题解决汇总
查看>>
linux->windows主动推送文件同步目录数据 linux-windows数据目录同步
查看>>
第三百零一节,python操作redis缓存-管道、发布订阅
查看>>
【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】
查看>>
cmd创建文件命令
查看>>
科学世界的人文关怀:开源科学与人工智能
查看>>