数字签名
鉴权
数字签名一般是指通过鉴权来保证接口传输数据的安全性, 通过客户端密匙和服务端的密匙相匹配就是鉴权,例如签名钥匙sign = abc123,加上签名后,接口传输参数是:
http://xxxx:8090/?a=1&b=2&sign=abc123,但是明文传输sign参数是不安全的,所以要经过通过md5加密 。
所以,密匙跟着参数一起传输到服务器的。
MD5加密例子:
import hashlib md5 = hashlib.md5() sign_str = "abc123" #定义一个字符串 sign_bytes_utf8 = sign_str.encode() md5.update(sign_bytes_utf8) sign_md5 = md5.hexdigest() #md5加密 print(sign_md5)
数据防篡改
将整个接口参数生成加密字符串,安全性更高,只是所谓的全参加密,但是全参加密也有弊端,因为MD5是不可逆的,服务器也必须知道接口的参数值才能MD5加密验证,否则验证失败。一般接口设计时对客户端请求参数并不知道。一般不用全参加密。
在接口开发过程中,一般通过时间戳+sign作为密匙加密传输。
这种情况测试接口时,通过获取时间戳和拿到sign密匙后,再拼接成一个字符串,再加密这个字符串,然后和参数一起传输。
MD5时间戳和sign的例子:
import hashlib # MD5加密 import time sign_key = 'asd123' # key 作为密钥 now_time = time.time() # 获取当前时间 这里获取的是从1970年1月1日0时0分0秒到现在度过的秒 c_time = str(now_time).split('.')[0] # 获取.之前的时间戳 sign = c_time + sign_key # 拼接成一个字符串 md5 = hashlib.md5() sign_bytes_uft8 = sign.encode(encoding='utf-8') #进行UTF-8编码 md5.update(sign_bytes_uft8) sign_md5 = md5.hexdigest() #md5加密 print(sign_md5)
当前时间戳+key加密后,就可以作为参数直接传输了