首页 > 数据库技术 > 详细

CMDB学习之API加密请求动态

时间:2019-12-11 14:20:33      阅读:91      评论:0      收藏:0      [点我收藏+]
#实现是通过时间戳+秘钥进行 MD5 加密处理
from
django.shortcuts import render,HttpResponse,redirect,reverse from django.views.decorators.csrf import csrf_exempt import json #使用rest_framework ,首先要安装pip去安装Djangorestframework ,这个模块 # 在Django的settings中注册app import hashlib import time from django.conf import settings from rest_framework.views import APIView from rest_framework.response import Response from api import models from api import service #服务端临时测试 KEY = alksdgjaldks #解密 def gen_key(key,ctime): key_str = {}|{}.format(key,ctime) md5 = hashlib.md5() md5.update(key_str.encode(utf-8)) return md5.hexdigest() class AssetTest(APIView): def get(self,request): return Response("get ok ") def post(self,request): result = {status:True,data:5666666} #拿到key 和ctime ,MD5 正加密处理和请求的数据进行校验 sign = request._request.GET.get(sign) ctime = request._request.GET.get(ctime) sign_key = gen_key(KEY,ctime) if sign != sign_key: result[status] = False result[data] = 检验不成功 return Response(result)

客户端测试API 

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests
import time,hashlib

#通过双方有key 的方式进行验证,
key = alksdgjaldks

ctime = time.time()
def gen_key():
    key_str = {}|{}.format(key,ctime)
    md5 = hashlib.md5()
    md5.update(key_str.encode(utf-8))
    return md5.hexdigest()


#通过双方有key 的方式进行验证
ret = requests.post(
    url = http://127.0.0.1:8000/api/test,
    params = {sign:gen_key(),ctime:ctime}
)

print(ret.text)

注意测试URL路由   

url(r‘^test‘,views.AssetTest.as_view()),#CBV 写法
上面是简单的加密,但是若劫持url依然可以去访问,所进一步进行修改
KEY = alksdgjaldks
#解密
def gen_key(key,ctime):
    key_str = {}|{}.format(key,ctime)
    md5 = hashlib.md5()
    md5.update(key_str.encode(utf-8))
    return md5.hexdigest()


SIGN_RECORD = {}

class AssetTest(APIView):
    def get(self,request):
        return Response("get ok ")
    def post(self,request):
        result = {status:True,data:5666666}
        #拿到key 和ctime ,MD5 正加密处理和请求的数据进行校验
        sign = request._request.GET.get(sign)
        ctime = request._request.GET.get(ctime)

        server_time = int(time.time()*1000)
        if server_time - int(ctime) > 5000:
            result[status] = False
            result[data] = 证书已经过期!
            return Response(result)

        if sign in SIGN_RECORD:
            result[status] = False
            result[data] = 证书已经使用!
            return Response(result)

        if sign != gen_key(KEY,ctime):
            result[status] = False
            result[data] = 检验不成功
            return Response(result)

        SIGN_RECORD[sign] = ctime
        return Response(result)
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests
import time,hashlib

#通过双方有key 的方式进行验证,
key = alksdgjaldks

ctime = int(time.time() * 1000)
def gen_key():
    key_str = {}|{}.format(key,ctime)
    md5 = hashlib.md5()
    md5.update(key_str.encode(utf-8))
    return md5.hexdigest()


#通过双方有key 的方式进行验证
ret = requests.post(
    url = http://127.0.0.1:8000/api/test,
    params = {sign:gen_key(),ctime:ctime}
)

print(ret.url,ret.text)

CMDB学习之API加密请求动态

原文:https://www.cnblogs.com/michael2018/p/10516073.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!