接口框架中,完成一些keyWordFunction,方便调用
使用Python内置哈希库对字符串进行MD5加密
导入MD5加密所需模块
import hashlib
创建md5对象
m = hashlib.md5()
传入需要加密的字符串进行MD5加密
m.update("str4MD5Encode")
获取到经过MD5加密的字符串
encodeStr = m.hexdigest()
print encodeStr
输出
Traceback (most recent call last):
File "E:/gitlab/SWQA_API/keyWordFun/encrypt.py", line 11, in <module>
m.update("str4MD5Encode")
TypeError: Unicode-objects must be encoded before hashing
可以将加密的字符串转为byte类型
import hashlib
m = hashlib.md5()
m.update(b"str4MD5Encode")
encodeStr = m.hexdigest()
logger.info(encodeStr)
输出
f8fd73cf519e6f11513d505b9dd33541
但是对于中文字符串的md5怎么办?
中文字符在python中是以unicode存在的,同一个字符串在不同的编码体系下有不同的值,所以在hash前需要进行编码
使用utf8
编码后再进行加密
import hashlib
m=hashlib.md5()
strs = "str4MD5Encode"
m.update(strs.encode("utf8"))
print(m.hexdigest())
logger.info(m.hexdigest())
输出
f8fd73cf519e6f11513d505b9dd33541
同样,使用gb2312
编码后加密同样可以输出相同的字符串
import hashlib
m=hashlib.md5()
strs = "str4MD5Encode"
m.update(strs.encode("gb2312"))
print(m.hexdigest())
logger.info(m.hexdigest())
输出
f8fd73cf519e6f11513d505b9dd33541
但是加密中文字符串时,是不一样的
使用utf8
加密 中文字符串 ”我们“,输出
ab4a85fc2ec4cf830e0f84aaacefcb1c
使用gb2312
加密 中文字符串 ”我们“,输出
7f6e13b138a58ac597d6d83a29e80d66
加密后的结果是不一样的,但是使用网上在线md5加密中文字符串”我们“,得到加密的字符串为:
ab4a85fc2ec4cf830e0f84aaacefcb1c
和utf8
编码后md5加密的字符串是一致的,尝试了几个中文字符串都是如此