zoukankan      html  css  js  c++  java
  • hashlib 加密

    hashlib 加密是不可逆的,对于同一个字符串,同一种算法,计算的结果永远是相同的,对于不同的字符串,计算的结果总是不同的

    会把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

    hashlib.md5 :最通用最快捷相对简单
    hashlib.sha1 :相对于md5算法要复杂些,已经开始被大家广泛应用,sha后的值越大,算法越复杂

    计算一个字符串的MD5值

    import hashlib
    md5 = hashlib.md5()
    md5.update('wanglan'.encode('utf-8'))
    ret = md5.hexdigest()
    print(ret)
    
    结果:
    d3c59851089276b3c8bae4a9eb1bb064 

    如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的

    import hashlib
    md5 = hashlib.md5()
    md5.update('howto'.encode('utf-8'))
    print(md5.hexdigest())
    
    md5 = hashlib.md5()
    md5.update('how'.encode('utf-8'))
    md5.update('to'.encode('utf-8'))
    print(md5.hexdigest())
    
    结果:
    f2ffef0cc0ffbbcc317322dc59c84f8a
    f2ffef0cc0ffbbcc317322dc59c84f8a

    md5虽然不能反解,但是加密是固定的,就是一一对应的,所有有缺陷,可以被暴力破解(撞库)对撞出来

    很多用户喜欢使用123456,888888,password等这些简单的口令,于是,黑客可以事先计算出这些常用口令的MD5值,得到一个反推表:

    'e10adc3949ba59abbe56e057f20f883e': '123456'
    '21218cca77804d2ba1922c33e0151105': '888888'
    '5f4dcc3b5aa765d61d8327deb882cf99': 'password'

    这样,无需破解,只需要对比数据库的MD5,黑客就获得了使用常用口令的用户账号

    由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:

    加固定盐

    import hashlib
    md5 = hashlib.md5('可以是任意的字符串'.encode('utf-8'))
    md5.update('123456'.encode('utf-8'))
    ret = md5.hexdigest()
    print(ret)
    
    结果:
    f9ae75bd085d7c8873f1d4231f11129f #加盐后的123456
    e10adc3949ba59abbe56e057f20f883e #加盐前的123456

    动态加盐 --最安全的存储密码的方式

    import hashlib
    ust = input('请输入姓名:')
    pwd = input('请输入密码:')
    md5 = hashlib.md5(ust.encode('utf-8'))
    md5.update(pwd.encode('utf-8'))
    ret = md5.hexdigest()
    print(ret)
    
    结果:
    请输入姓名:wanglan
    请输入密码:213456
    55761365bd0a621b450239a46b87cd56
  • 相关阅读:
    14、Java并发性和多线程-Java ThreadLocal
    15、Java并发性和多线程-线程通讯
    12、Java并发性和多线程-Java同步块
    11、Java并发性和多线程-Java内存模型
    Java中原始数据类型存放位置理解
    10、Java并发性和多线程-线程安全与不可变性
    9、Java并发性和多线程-线程安全与共享资源
    8、Java并发性和多线程-静态条件与临界区
    7、Java并发性和多线程-如何创建并运行线程
    4、Java并发性和多线程-并发编程模型
  • 原文地址:https://www.cnblogs.com/wanglan/p/10034221.html
Copyright © 2011-2022 走看看