关于hashlib哈希算法的一些个人笔记

关于hashlib哈希算法的一些个人笔记摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是…

大家好,又见面了,我是你们的朋友全栈君。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。

通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是十六进制数据字符串的值来表示。
下面是一段简单的代码示例:

import hashlib

def md5(str):
    md5 = hashlib.md5()
    md5.update(str)
    ##return md5.digest() # 返回摘要,作为二进制数据字符串值
    return md5.hexdigest()   # 返回摘要,作为十六进制数据字符串值

if __name__ == "__main__":
    str = "abcdefg"
    str = str.encode("utf8") # 
    print(md5(str))

返回一个十六进制的固定长度字符串,结果如下:

e2fc714c4727ee9395f324cd2e7f331f

如果用的是digest(),则会返回一个二进制的,结果如下:

b"\xe2\xfcqLG'\xee\x93\x95\xf3$\xcd.\x7f3\x1f"

如果我们改变str中的任意字符,结果会发生很大的变化。

注意一点:python3中,字符串默认的都是unicode,所以需要先encode到utf8,否则会报错类似于下面这个错误:

Unicode-objects must be encoded before hashing

由于是单向加密,通常可以用来保存一些内部信息到数据库中,比如用户名密码这一类。因为是单向的,所以不能用于加密解密,只适合于防篡改,或者验证用户密码等。

我们也可以通过把登录名作为Salt的一部分来计算MD5,这样不容易被其他人通过MD5反推明文口令:

def get_md5(user, passwd):
    if isinstance(url, str):
        url = url.encode("utf8")
    m = hashlib.md5()
    m.update(user + passwd)
    return m.hexdigest()


if __name__ == "__main__":
    user = "root"
    passwd = "password"
    print(get_md5(user, passwd))

注意中间我加了if判断,以便于做unicode的转换。在python3中,已经没有unicode这种类型,str就是unicode。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136692.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker下载安装教程_vmware mac版本

    docker下载安装教程_vmware mac版本前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月28日
    10
  • Oracle 11g AMM与ASMM切换

    Oracle 11g AMM与ASMM切换现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。在10g时,Oracle推出了ASMM(AutomaticSharedMemoryManagement),实现了OracleSGA和PGA内部结构的自调节。进入11g之后,AMM(A…

    2022年5月3日
    46
  • 撸一个简易聊天室,不信你学不会实时消息推送(附源码)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:糊糊糊糊糊了 www.cnblogs.com/rynxiao/p/13825438.html 分不清轮询、长轮…

    2021年6月26日
    109
  • java实现10种排序算法[通俗易懂]

    java实现10种排序算法[通俗易懂]1.冒泡排序(BubbleSort)importjava.util.Arrays;//冒泡排序publicclassBubbleSort_01{ publicstaticvoidmain(String[]args){ inta[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; //记录比较次数 intcount=0; //i=0,第一轮比较 for(inti=0;i<a.length-1;i

    2022年6月21日
    25
  • 免备案使用国内服务器_国外服务器国内域名要不要备案

    免备案使用国内服务器_国外服务器国内域名要不要备案关于免备案这个问题,我首先说明一下,我不是在提倡大家域名不要备案,这只是一项技术并不是用来给大家滥用的,希望大家能够明白!众所周知,要想使用国内服务器或者主机是是必须要通过工信局的ICP备案的,但是也有的伙伴怕麻烦或者通过不了,这里我教下大家这个使用CDN做到免备案,其实要做到绕过国内服务器域名备案的方法目前小编知道的有两种,一种是利用反向代理、一种就是利用CDN,当然了,你有更多方法愿意分享出来的,可以在评论下方提出。今天,我们就着重讲利用CDN绕备案吧首先,我们要准备好工具,网站、服务器、域

    2025年10月21日
    3
  • B站牛逼的实时弹幕系统架构是如何实现的

    B站牛逼的实时弹幕系统架构是如何实现的

    2020年11月14日
    220

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号