• python之hashlib模块


      hashlib模块是python内置的摘要算法。

      hashlib有两种调用方式:

      第一种是hashlib.new方法

      new(name, data=b'', **kwargs) - returns a new hash object implementing the given hash function; initializing the hash using the given binary data.

    import hashlib
    md5obj = hashlib.new("md5", b'alex3714')
    md5obj.hexdigest()

      第二种是直接创建被允许的的算法

      Named constructor functions are also available, these are faster than using new(name):

      md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(), sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256.

      More algorithms may be available on your platform but the above are guaranteed to exist. See the algorithms_guaranteed and algorithms_available attributes to find out what algorithm names can be passed to new().

    import hashlib
    # 将一个字符串进行摘要运算,拿到一个固定的值;,包含了多中加密算法
    md5obj = hashlib.md5() # 摘要
    md5obj.update(b'alex')  # 要加密的字符串的字节
    md5obj.update(b"3714")  # 要加密的字符串的字节
    # 多次update是拼接到一起的,再进行hexdigest(),结果和一次update的时一样的
    # md5obj.update(b'alex3714)
    md5obj.hexdigest() #转成16进制,加密结果是32位

      用户名与密码加密:

      名词:撞库,根据输入和摘要算法的结果来验证输入与存储的加密算法结果的一致性。

         加盐,通过加入随机字符串来防止撞库。

      对用户名和密码加密,通常会进行加盐:

        1.根据用户名生成随机字符串

        2.将该随机字符串与密码拼接在一起,进行摘要算法,得到最后的密码加密结果

    import hashlib, random
    l1 = list(range(48, 58))
    l2 = list(range(65, 91))
    l3 = list(range(97, 123))
    l1.extend(l2)
    l1.extend(l3)
    
    username = "alex"
    passwd = "alex3714"
    
    # 根据用户名生成随机字符串
    lis = ""
    for i in range(16):
        v = random.randint(0, len(l1)-1)
        lis += chr(l1[v])
    
    passwd += lis
    md5 = hashlib.new("md5", bytes(passwd, encoding="utf8"))
    passwd = md5.hexdigest()
    
    user = dict(
        username=username,
        user_string=lis,
        passwd=passwd,
    )
    
    print(user)
    
    # {'username': 'alex', 'user_string': 'MnkCViH3avdDYp3U', 'passwd': '35a5a0e38ea22720a78d594d8f02a021'}
  • 相关阅读:
    (转)超过 130 个你需要了解的 vim 命令
    ubuntu下解压文件命令大全(转)
    HDU 4681 String
    Linux使用过程中常见问题及其解决方法
    Linux 命令 及 简单操作 学习
    HDU 4666 Hyperspace (最远曼哈顿距离)
    POJ 2049 Finding Nemo
    HDU 4655 Cut Pieces
    <textarea>标签的使用
    数据库插入失败 和回滚
  • 原文地址:https://www.cnblogs.com/kuaizifeng/p/9081566.html
Copyright © 2020-2023  润新知