zoukankan      html  css  js  c++  java
  • Python之 加密模块

    对称加密:就是加密、解密的方式是一样的,只要知道了加密用的key,就可以解密,加密速度比较快,适合大数据量的加密处理。

    非对称加密:就是和对称加密的方式不一样,加密用公钥,解密用私钥,。rsa是非对称加密,非对称加密速度相对慢一点。

    hashlib模块

    • 加密方式以md5方式加密举例
    • 是标准模块,直接导入即可
    • 还有其他的加密方式,比如:.sha1()、.sha224()、.sha256()等,加密后的字符串长度更长,安全性更高

    一、加密步骤

    1、字符串先转成二进制类型

    使用.encode()方法转成二进制类型

    import hashlib
    password='123456'
    print(password.encode())#加密时只能传二进制类型,字符串不能直接加密,要先使用encode()转成二进制类型的才可以加密
    #结果为:b'123456'

    2、使用加密方法

    使用.hexdigest()方法输出加密后内容

    import hashlib
    password='123456'
    m=hashlib.md5(password.encode()) #先转成二进制,再加密
    print(m.hexdigest()) #获取加密后的结果
    
    #结果:e10adc3949ba59abbe56e057f20f883e

    3、打印加密后的内容

    使用dir()内置函数显示该变量的所有方法

    由于该模块pycharm无法提供提示方法,即输入m“.”不出来方法,所以可以使用内置函数dir(),将所有方法打印出来。

    #print(dir(m)) #由于这个加密模块pycharm提供不了提示方法,所以如果想知道都有什么方法,可以使用内置函数dir(),使用这条语句就能打印出所有方法了
    print(m.hexdigest())

    二、加密相关

    1、检验加密结果

    • 由于md5方式加密完的字符串无论原字符串有多长都是32位,因此可以使用len()方法检验是否加密成功:
    print(len(m.hexdigest()))

    2、md5加密之后是不可逆的

    • 网络上可以解密的原理是撞库,即:将常用的密码加密完存在数据库里,然后直接搜库。

              如果输入的加密后密码碰巧数据库里有,就能把对应的加密前密码返回给你,并不是真正的解密;如果是密码复杂些,他们库里没有,就会解密不出来了。

    3、其他的加密方式

    本文的加密方式以md5方式加密举例,还有其他的加密方式,比如:.sha1()、.sha224()、.sha256()等,加密后的字符串长度更长,安全性更高。

    三、加盐

    原理:

    如果要对password=123456加密,这个明文密码太简单,容易撞库解密,所以在123456之后随机加一个字符串,比如abc,这样实际是对123456abc进行加密,如果不知道abc这个字符串,反解的可能性降低,安全性更高。这样的一个字符串就叫做盐。

    salt = '545chjdsafl@*&'
    password = input('password:')
    password += salt  #加盐,把salt和password组合到一起
    
    m = hashlib.md5(password.encode())
    result = m.hexdigest()
    print(result)

    四、实际应用

    #实现加密:传入一个值,如果有盐值,则加盐加密;否则直接加密
    def my_md5(s:str,salt=None):
        s=str(s)
        if salt:
            s=s+salt
        m=hashlib.md5(s.encode())
        return m.hexdigest()

    扩展:

    加密可用作下载,如:我们下载一些模块,或是APP下载一些东西,会事先有一个MD5、sha256等产生的一个校验码,产的校验码就是用来校验下载的文件是不是下载全了,下载完成后,先把文件MD5下,然后和事先产生的校验码对比下,完全一致,说明下载全了。还有是查看文件大小有没有变化,也可以使用MD5的方式来对比下。


    任何付出都是值得的,会越来越好 

  • 相关阅读:
    PLSQL_Oracle Trigger触发器的基本概念和用法
    PLSQL_Oracle Object所有数据库对象类型汇总和简解(概念)
    OAF_EO系列2
    OAF_EO系列1
    OAF_OAF Debug And Log调试和记录工具的详解(案例)
    OAF_OAF Exception Handling异常处理(概念)
    DBA_FND Load程式迁移工具介绍和应用(案例)
    Form_Form标准控件Folder开发解析(案列)
    BEvent_标准BusinessEvent用以监控供应商的修改(案例)
    PLSQL_Oracle Logon Trigger的建立
  • 原文地址:https://www.cnblogs.com/brf-test/p/11761827.html
Copyright © 2011-2022 走看看