码迷,mamicode.com
首页 > 其他好文 > 详细

hashlib 加密

时间:2018-11-28 20:36:01      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:pre   数据   ret   iges   hex   一个   NPU   数据转换   就是   

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

 

hashlib 加密

标签:pre   数据   ret   iges   hex   一个   NPU   数据转换   就是   

原文地址:https://www.cnblogs.com/wanglan/p/10034221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!