每天努力一点点,坚持下去 ------ 博客首页

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的方式来对比下。

 

 


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

posted @ 2019-10-29 21:52  他还在坚持嘛  阅读(647)  评论(0编辑  收藏  举报