os.urandom生成随机加密字符
小谈os.urandom
os.urandom(n)函数: 它是用来获取一个指定长度的bytes对象, 它实际上是在获取不同操作系统特定提供的随机源, 它可以被用来做随机加密的key使用。u 指的是 unpredictable(难以预料的), 真是看词便可知其意了。
使用os.urandom
先看看os.urandom生成的对象吧
import os
for i in range(10):
os_urandom_obj = os.urandom(20)
print('%s: %s' % (i+1, os_urandom_obj))
################# 结果 ##################
>>> 1: b'\xf8\xde\xc7CUh\xdf\x84\x1di\x13\xd5\x8d\xb1\x12\x8a\xc0\xed=\xe0'
>>> 2: b'P\xa1\xd1\xad?\xc3(S\x0b\x02e\xec\xb3\xe9A\xd64\xd9>N'
>>> 3: b'\x94\r-hW\xc1\xd5-\xfb\x17\xb44\xe3;tCX_G\x1c'
>>> 4: b'\xcd\x02\xaf"\xd6\xd0\x1a\xed\x1a\xe1\xc3\x0f\xc2\x85\xe2 \xde\xf4#g'
>>> 5: b'G3\x1bm\xe8\x02\xdb\xdfx\x1e\xc8\xdc\xc9bl\xc2\x9fN)\xab'
>>> 6: b'c*\x06\x11\xd1\xd0\xf00p$\x92\xf39\xc1L\xe5t\x8a8`'
>>> 7: b'{\xd1^\'\x92\x9c\\kY\x038C\xe3\xa9\xeb"\x9c\x14\xfc\x97'
>>> 8: b'\r\xdfk><\x93\xbe\xe3\t\x12\xaa\xc3~V>\x99\xb7\xbc\xcd"'
>>> 9: b'\xf5Z\x9f`T"Y\x13\xe3\x92\xe1v]D\xb5nv4\xe6?'
>>> 10: b'\xb7\xe5\xe6\x961b\xe2<0\xf1\xebbI\xfe\xb1\x18|\xc8R-'
对于这样的随机字节对象, 如何用来加密? 我选择用hashlib.md5, 看下面代码
import os, hashlib
for i in range(10):
os_urandom_obj = os.urandom(20)
hashlib_obj = hashlib.md5(os_urandom_obj).hexdigest()
print('%s: %s' % (i+1, hashlib_obj))
################# 结果 ##################
>>> 1: 953fd004b2b7242f0ab21240678d17fc
>>> 2: 5bd39fb9fa3623c21c811dfb2d1876fa
>>> 3: 8367caa89f556c25074d39231a02da51
>>> 4: 10d6a6fca464b25c309ce012967ed852
>>> 5: 99cbf151b83e08e5f96d95ba579dc55c
>>> 6: 05a08a82b809b596e04e752ba2637a0d
>>> 7: 788a1538164790ee8fa4fa42c9adc0db
>>> 8: 1daa9305d66622813258647d1c4c19a2
>>> 9: 6259e8d2fafe2e4f97e2868122053b2a
>>> 10: 3f40aee2d127e2453042267bbb4f56f1
这里说说 hash.digest() 与 hash.hexdigest() 的区别
hash.digest()
返回摘要,作为二进制数据字符串值
>>> b'\xf5Z\x9f`T"Y\x13\xe3\x92\xe1v]D\xb5nv4\xe6?'
hash.hexdigest()
返回摘要,作为十六进制数据字符串值
>>> 6259e8d2fafe2e4f97e2868122053b2a
这样生成的 hashlib_obj 对象就可以用来做加密的key了, 当然还有很多的方法, 这里就不一一阐述了。