python实现md5加密_Python实现md5加密验证访问接口总结
實現md5加密驗證訪問接口總結
作者:李祥權
【摘要】
在項目開發中,遇到用戶端點登陸接口需要加密驗證才可以登陸的情況,當我們需要訪問對方的接口時,為了保證訪問的安全性,使用python實現md5加密過程
【正文】
1、有某個應用場景為采用xxx.xxx?UserID=&Token=xxx&url=xxxxx與對方接口,其中:
-xxx.xxx:是對方的接口URL
-UserID:比如是當前某一系統的登錄名
-Token:通過某種方式加密的訪問令版Token(下有詳述)
-url:端點登錄成功后需要轉向的網址,若沒有,則由對方直接轉到相關首頁
2、Token說明:
采用32位ToMd5(UserId + PublicKey +某種特別定義的日期格式),myToken = ToMd5(UserID + PublicKey + YYYYMMDD),md5的加密實現為:當我們要訪問對方某一url的時候需要匹配md5加密結果與Token值是否一致來實現,比如Token值也是對方通過md5加密的一個值,那么雙方通過協商對UserId、PublicKey、日期來進行md5加密,如果加密結果即myToken與給我們的Token值一樣,即匹配正確,則進行下一步驗證
3、對方驗證方法和步驟:
(1)第一步:取Request.ServerVariables(“HTTP_REFERER”)是否來自某一特定系統的網址,具體以互相協商的網址為定義。若是相關網址,則進入第二部,否則端點登陸不成功。
(2)第二部:取傳遞的UserID值,和Token值。同時進行計算內部Token值,若計算的內部Token值與傳遞的Token值不一樣,端點登錄失敗,否則轉向第三步。
(3)第三步:取url值,若為空,則直接轉向首頁,否真轉向相關URL。
4、python實現的代碼如下:
# -*- coding: utf-8 -*-
import hashlib
from django.http import JsonResponse
from datetime import date
# md5加密接口
def to_md5(s):
md5 = hashlib.md5()
md5.update(s)
return md5.hexdigest()
def api_md5test(request):
try:
publib_key = 'sakds3297549017234095723905170950' # 此值由雙方協商
date_formate = '%Y%m%d' # 雙方協定
user_id = request.GET.get('UserID')
refer_url = ['http://oa.ebscn.com/api/gouc.asp',
'http://10.88.2.94/api/gouc.asp',
'http://10.88.2.91/api/gouc.asp']
token = request.GET.get('Token')
url = request.GET.get('url')
# 獲REFERER,告訴服務器我是從哪個頁面鏈接過來的
Refer = request.environ.get('HTTP_REFERER')
b = False
for item in refer_url:
if item == Refer:
b = True
break
if not b:
return JsonResponse({
'result': False,
'message': 'HTTP_REFERER不是來自相關網址',
'data': None
})
mytoken = to_md5(user_id + publib_key +
date.today().strftime(date_formate))
if mytoken != token:
return JsonResponse({
'result': False,
'message': 'Token值不匹配',
'data': None})
if url == '':
url = 'https://xxx.xxx.xxx' # 系統首頁網址
return JsonResponse({'result': True, 'data': url})
except Exception as e:
return JsonResponse({
'result': False,
'message': repr(e),
'data': None
})
總結
以上是生活随笔為你收集整理的python实现md5加密_Python实现md5加密验证访问接口总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 多项式拟合最多的项数_牛顿插值
- 下一篇: linux c语言文件拷贝_linux