zoukankan      html  css  js  c++  java
  • 第二十五篇 hashlib模块(* *)

    用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。

    加密复杂程度: SHA1   <   SHA224    <   SHA256    <  SHA384   <   SHA512 <  MD5 

    加密越复杂,意味着消息的时间就越多。

    哈希算法:把一个不定长的内容,加密变成一个定长的内容,而且与被加密内容是唯一对应的。

    很常见的,我们在网银,淘宝,京东能都有账户密码,用户输入的时候都是明文,密码在传输的过程中,必须是密文,而不能是明文,同时数据库存的时候,必须存为可与明文唯一对应的加密后的值。

    三个知识点:

    1. 一个字符串可以转换成一段密文,并且不能被反解;

    2. 既然不能反解,那只能正解,比如在登录的时候就让他们都变成密文,然后用两个密文进行比较

    3. 原生写的MD5,全世界人都知道,所以可以进行加言,该加言只有开发者自己知道。对于需要加密的都是基于这个加言后的MD5进行的,别人也就无法反解了。

    import hashlib
    
    obj = hashlib.md5()
    
    obj.update("hello".encode("utf-8"))
    print(obj.hexdigest())   # 5d41402abc4b2a76b9719d911017c592
    

    以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

    import hashlib
    
    obj = hashlib.md5("jiayan".encode("utf"))
    
    obj.update("hello".encode("utf-8"))
    print(obj.hexdigest())   # 686a12bb5577133d6698131cbf0b4b4a
    

    需要注意的:

    先对"A"进行加密,接着在对"B"进行加密,"B"的加密是基于"A"的加密的。相当于"B"的加密对象是"AB"

    import hashlib
    
    obj = hashlib.md5("jiayan".encode("utf"))
    
    obj.update("hello".encode("utf-8"))
    print(obj.hexdigest())   # 686a12bb5577133d6698131cbf0b4b4a
    
    
    obj.update('world'.encode('utf8'))
    print(obj.hexdigest())   # c805eca8aad002e5d44a39d3aec78f8e
    
    #上面对于"world"的加密,是基于Hello加密后,对"world"再进行加密的。
    
    验证:
    import hashlib
    
    obj = hashlib.md5("jiayan".encode("utf"))
    
    obj.update('world'.encode('utf8'))
    print(obj.hexdigest())   
    # b278e99dfd536f7844785bbd39288e1a (没有"hello"时)
    # c805eca8aad002e5d44a39d3aec78f8e  (有"hello"时)
    与没有注释"hello"的结果不一致,证明是基于hello加密后再进行加密的。
    
    还可以通过下面的方法验证
    import hashlib
    
    obj = hashlib.md5("jiayan".encode("utf"))
    
    obj.update('helloworld'.encode('utf8'))
    print(obj.hexdigest())
    # c805eca8aad002e5d44a39d3aec78f8e  ("helloworld"连在一起时)
    # c805eca8aad002e5d44a39d3aec78f8e  (有"hello"时)

    hashlib下还有SHA256等:

    SHA256等其他加密算法的用法与MD5完全一样,只需要把MD5换成256等即可。

    import hashlib
    
    obj = hashlib.sha256("jiayan".encode("utf-8"))
    obj.update("hello".encode("utf-8"))
    print(obj.hexdigest())
    # 24ac0688c0d320346adc8cafd1ba543cf4332ed1e5fdd610edd5f7365b4a862f
  • 相关阅读:
    Linux之定时器与时间管理 【转】
    LDAP研究
    Mac中使用svn进行项目管理
    英国调查报告称中国梦吸引力首超美国梦
    怎样删除在Github中创建的项目
    MySQL分组数据
    Eclipse ADT 插件安装慢的解决的方法
    iOS插件化研究之中的一个——JavaScriptCore
    二维码的妙用:通过Zxing实现wifi账号password分享功能
    CF(435D
  • 原文地址:https://www.cnblogs.com/victorm/p/9281498.html
Copyright © 2011-2022 走看看