Python 学习之路 - 反射,hashlib

反射

 1 import os
 2 mo = "common"
 3 # path = os.path.dirname(os.path.abspath(__file__))
 4 mod = __import__("other."+ mo,fromlist=True)#反射的方式导入一个模块,other.是模块的目录,mo是模块
 5 
 6 
 7 # setattr() 在某个模块设置某个功能
 8 # delattr() 在某个模块删除某个功能
 9 
10 def fun():
11     p = input("Please enter operate:")
12 
13     if hasattr(mod,p):# hasattr() 在某个模块中某个功能是否存在
14         a = getattr(mod,p)# getattr() 在某个模块中得到某个功能
15         a()
16     else:
17         print("404")
18 
19 
20 if __name__ == '__main__':
21     fun()

 

hashlib

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

 1 import hashlib
 2  
 3 # ######## md5 ########
 4  
 5 hash = hashlib.md5()
 6 hash.update(b'admin')
 7 print(hash.hexdigest())#hexdigest 16进制
 8  
 9 # ######## sha1 ########
10  
11 hash = hashlib.sha1()
12 hash.update(b'admin')
13 print hash.hexdigest()
14  
15 # ######## sha256 ########
16  
17 hash = hashlib.sha256()#比md5安全
18 hash.update(b'admin')
19 print(hash.hexdigest())
20  
21  
22 # ######## sha384 ########
23  
24 hash = hashlib.sha384()
25 hash.update(b'admin')
26 print(hash.hexdigest())
27  
28 # ######## sha512 ########
29  
30 hash = hashlib.sha512()
31 hash.update(b'admin')
32 print(hash.hexdigest())

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

1 import hashlib
2  
3 # ######## md5 ########
4  
5 hash = hashlib.md5(b'898oaFs09f')
6 hash.update(b'admin')
7 print(hash.hexdigest())

python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密,常用于网络消息的加密传输。

1 import hmac
2 h = hmac.new(b'xxx')
3 h.update(b'hellowo')
4 print(h.hexdigest())

 

posted @ 2017-03-13 22:47  耕耘的小白  阅读(205)  评论(0编辑  收藏  举报