SessionID

There are 1 entries for the tag SessionID

Python产生token唯一值的算法性能比较

MitchellChu 2015-11-08 其他技术

在很多场合的时候,我们都需要产生不重复的字符串来标志操作的唯一性,比如:HTTP请求中,我们需要产生SessionID,在数据存储的时候,我们也可能需要生成唯一的字符串来作为数据的ID以便我们进行索引。本文的由来是在使用tornado的时候,需要使用Session,Session需要有唯一的ID值。为了尽可能快速的生成安全可用的Session ID,而对Python当前的一些比较通用的生成方法进行了比较。为了方便说明,后继的所有说法均以token作为SessionID, 唯一字串等的统一表述。 在网络中比较流行的是使用uuid4().hex的方式来生成token,但另外一种声音是,uuid4().hex的安全性不高,需要使用安全性更高的算法来代替,后继出现了使用os.urandom(24),或者自行随机生成字符串的形式(uuid4使用的是os.urandom(16)),再到后来,使用OpenSSL和M2Crypto的方式来生成随机数。OpenSSL和M2Crypto需要Python安装pyOpenSSL和M2Crypto。M2Crypto由于接触少,因此没有对M2Crypto进行测试。   测试环境: CPU: Intel Xeon E3 3.30Hz 3.70Hz Memory: 16GB System: Windows 7 64-bits # times:测试次数 # func: 要测试的函数名称 # 此方法是入口方法 # 各个算法以函数的形式定义,接受times参数即可——By MitchellChu def crash_testx(times, func): import time print('\r\n--------------------------------------------') print("test function: %s" % func.func_name) print("begin time: %s" % time.strftime('%Y%m%d %X')) begin_time = time.time() (crashed_times, hash_data_len) = func(times) print("end time: %s" % time.strftime('%Y%m%d %X')) print("take time:%s" % (time.time() - begin_time)) print("test times: %d, crashed times:%d, hash data length:%d" % (times, crashed_times, hash_data_len)) print('--------------------------------------------\r\n')   产生方式(generate method) ...

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。