zoukankan      html  css  js  c++  java
  • hashlib,uuid

    import hashlib
    
    # 不管算法多么不同,摘要的功能始终不变
    # 对于相同的字符串使用同一个算法进行摘要,得到的值总是不变的
    # 使用不同算法对相同的字符串进行摘要,得到的值应该不同
    # 不管使用什么算法,hashlib的方式永远不变
    # MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示
    # SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,
    # 不过越安全的算法越慢,而且摘要长度更长。
    #*******MD5 md5 = hashlib.md5() md5.update(b'123456') print(md5.hexdigest()) #e10adc3949ba59abbe56e057f20f883e #拼接输出 md5 = hashlib.md5() md5.update(b'abc') md5.update(b'123456') print(md5.hexdigest()) #0659c7992e268962384eb17fafe88364 # 值和md5.update(b'abc123456')是一样的 #加盐 import hashlib # 提供摘要算法的模块 md5 = hashlib.md5(bytes('username',encoding='utf-8')) #加盐的步骤 md5.update(b'123456') print(md5.hexdigest()) #68892041f359eb88d917dcbbe3d6f998 # 动态加盐: 使用用户名的一部分或者 直接使用整个用户名作为盐 import hashlib # 提供摘要算法的模块 md5 = hashlib.md5(bytes('user',encoding='utf-8')+b'username') md5.update(b'123456') print(md5.hexdigest()) #36fb067a8e6443e1fc2c79c9afa941a0 #*****SHA1 sha = hashlib.sha1() sha.update(b'123456') print(sha.hexdigest()) #7c4a8d09ca3762af61e59520943dc26494f8941b #生成随机token import hashlib, time ctime = str(time.time()) md5= hashlib.md5(bytes('username', encoding="utf8")) md5.update(bytes(ctime, encoding="utf8")) print(md5.hexdigest()) # 用户的登录 import hashlib usr = input('username :') pwd = input('password : ') with open('userinfo') as f: for line in f: user,passwd,role = line.split('|') md5 = hashlib.md5() md5.update(bytes(pwd,encoding='utf-8')) md5_pwd = md5.hexdigest() if usr == user and md5_pwd == passwd: print('登录成功')

     uuid

    # uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现。有时也称guid(global unique identifier)。python中自带了uuid模块来进行uuid的生成和管理工作。(具体从哪个版本开始有的不清楚。。)
    # python中的uuid模块基于信息如MAC地址、时间戳、命名空间、随机数、伪随机数来uuid。具体方法有如下几个:  
    # uuid.uuid1()  基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性。
    # uuid.uuid2()  算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法。
    # uuid.uuid3(namespace,name)  通过计算一个命名空间和名字的md5散列值来给出一个uuid,
    # 所以可以保证命名空间中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。
    # namespace并不是一个自己手动指定的字符串或其他量,而是在uuid模块中本身给出的一些值。
    # 比如uuid.NAMESPACE_DNS,uuid.NAMESPACE_OID,uuid.NAMESPACE_OID这些值。这些值本身也是UUID对象,
    # 根据一定的规则计算得出。
    # uuid.uuid4()  通过伪随机数得到uuid,是有一定概率重复的
    # uuid.uuid5(namespace,name)  和uuid3基本相同,只不过采用的散列算法是sha1
    
    import uuid
    print(uuid.uuid1()) #0b4ef9c6-06bf-11e9-8c49-c83dd4f797e9
    print(uuid.uuid3(uuid.NAMESPACE_DNS,'python123'))   #7ba48269-b52c-3182-a229-ac7a5ccb2ab0
    print(uuid.uuid4()) #1539829f-b194-44cb-83b7-46e1be1ee1be
    print(uuid.uuid5(uuid.NAMESPACE_DNS,'python123'))   #dd1067b9-44f7-5039-8753-78964561207c
  • 相关阅读:
    通过了解Servlet和Http之间的关系,了解web中http通信使用(二)
    Java 简单操作hdfs API
    安装Apache-storm-0.9.1-incubating图解教程
    CentOS6.4安装Zookeeper-3.4.12图解教程
    JDBC简单查询数据库
    Windwos上Mysql突然出现系统错误3,找不到系统路口
    利用Javaweb应用中六种属性范围,来理解Servlet的并发问题
    Servlet中分发器和重定向两兄弟
    如何查看服务器机房位置
    解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
  • 原文地址:https://www.cnblogs.com/chvv/p/10165956.html
Copyright © 2011-2022 走看看