应用场景:
组件层是一个接口提供商,需要给多个外部系统提供接口服务。如何保证过来的接口请求是安全的呢?我个人想实现类似于支付这样的模式。实现的原理大概如下
系统1.要传递的参数如下
a='name'
b='hello'
这两个字段要参与加密。其中密钥为key=123,先对其进行一次md5
$str = 'a=name&b=hello&key=123'
32位加密:
import hashlib
print hashlib.new("md5", $str).hexdigest()
现在将这三个参数一并传递到组件。
组件要做的第一件事情就是接收到a与b的值加上当前我们所约定好的密钥值进行一次MD5加密看与我们所传递过来的MD5的值数据是否一致如果不相同就说明这个接口是一个有问题的。否则就是正常的可以正常工作了!
PS:主要是在PUB这块的接口还有数据的增、删改接口其他的可以不用如果只是查询的话!
部分代码如下:
- appid = request.GET.get('appid','0').strip()
- mdkey = hashlib.new("md5", "appid="+appid+"&key="+ssh_key).hexdigest()#ssh_key密钥
- params = urllib.urlencode({'appid': appid,'syscode':sys_code,"mdkey":mdkey})
- url_handle=urllib.urlopen(premoduleurl+"pubhost/ho/del/?%s" % params)
- 这个是调用方要提供的
接收方
appid = request.GET.get('appid','').strip()
"""
获取系统代号与加密的KEY
"""
syscode = request.GET.get('syscode','').strip() #当前系统代号
mdkey = request.GET.get('mdkey','').strip()
#获取当前这个系统代号所对应的密钥。客户端传递过来的加密字符串
ssh_key = sys_ssh_key.get(syscode)
selfmdkey = hashlib.new("md5", "appid="+appid+"&key="+ssh_key).hexdigest() #拿出来再加密
if mdkey.strip() == selfmdkey.strip():
#表示双方加密的字符串一样。就可以做动作!
else: return HttpResponse("0")
阅读(2319) | 评论(0) | 转发(0) |