python数字加密方法(python中的密码加密以md5为例)
python数字加密方法(python中的密码加密以md5为例)
要完全防止信息泄露是非常困难的事情,除了防止黑客外,还要防止内部人员泄密。但如果采用合适的算法去加密用户密码,即使信息泄露出去,黑客也无法还原出原始的密码(或者还原的代价非常大)。也就是说我们可以将工作重点从防止泄露转换到防止黑客还原出数据。基于上面所说,很多前辈大牛门创造出了很多的加密算法,比如MD5、SHA1。。。
一个Demo,认识MD5使用方法:
import hashlib
# 生成一个md5对象
md5_obj=hashlib.md5() # m=hashlib.sha256()
# 使用update来加密明文
md5_obj.update('hello'.encode('utf8'))
# md5_obj调用内置hexdigest(),生成加密后的结果:5d41402abc4b2a76b9719d911017c592
print(md5_obj.hexdigest())
# 还可以继续只用update() 两次加密后的内容等于update("helloworld")
md5_obj.update('world'.encode('utf8'))
print(md5_obj.hexdigest())
md5_obj2=hashlib.md5()
md5_obj2.update('helloworld'.encode('utf8'))
# 打印判断两次加密的结果:True
print(md5_obj2==md5_obj)
'''
注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
所以update多次为校验大文件提供了可能。
'''
基于Demo中MD5对象可以多次update(),我们可以使用“密码加盐”的方法提高密码的破解难度。
password = "helloworld"
def password_md5(password):
md5_obj = hashlib.md5()
md5_obj.update(password.encode('utf-8'))
# 密码加盐
salt = "一二三四五 上山打老虎"
md5_obj.update(salt.encode('utf-8'))
md5_obj.hexdigest()
"""
注意:使用“密码加盐”后,在进行验证密码时也一定要在用户输入的password基础上进行加盐处理
"""
MD5算法加密是使用较多的加密方法,加上加盐处理,能应付绝大多数的应用场景。