API接口入門(二):API接口的籤名驗籤和加解密原理

2021-01-08 人人都是產品經理

上篇文章:《API接口入門(一):讀懂API接口文檔》已經解釋了什麼是API接口,API接口的基本交互是怎麼樣的?讀完後我們可以知道,API接口應用實際上是系統間通訊的過程,A向B傳輸參數,B向A返回結果。那本章將講解API接口傳輸的籤名和加密。適合閱讀的人群:產品經理及求職者

本文目錄:

API接口為什麼要籤名加密?API接口如何加密?

一、API接口為什麼要籤名加密?

想像一個場景:一位許久不見的好兄弟,突然在微信裡面跟你說「兄弟,借我1萬應急唄」,你會怎麼反應?

我想大部分人馬上的反應就是:是不是被盜號了?他是本人嗎?

實際上這是我們日常生活中常見的通訊行為,系統間調用API和傳輸數據的過程無異於你和朋友間的微信溝通,所有處於開放環境的數據傳輸都是可以被截取,甚至被篡改的。因而數據傳輸存在著極大的危險,所以必須加密。

加密核心解決兩個問題:

你是本人嗎?(籤名驗籤)你傳過來的信息是對的嗎?(加密解密)

二、API接口如何籤名驗籤和加密解密?

古代人寫信通過郵差傳信,路途遙遠,他們為了避免重要的內容被發現,決定用密文來寫信,比如我想表達「八百標兵上北坡」,我寫成800north,並且收件人也知道怎麼閱讀這份信息,即使路上的人截取偷看了,也看不懂你們在說的什麼意思。同時我在文末籤上我的字跡,在盒子裡放上我的信物(比如一片羽毛等等),這樣收件人也就知道這份信是我寄出的了。

這被稱為「對稱性密碼」,也就是加密的人用A方式加密,解密的人用A方式解密,有什麼缺點呢?

如果你經常傳輸,這就很容易被發現了密碼規律,比如我很快就知道你寄信都會帶上一片羽毛,那我以後也可以搞一片羽毛來冒充你了。加上,如果我要給很多人寄信,我就要跟每個人告訴我的加密方式,說不準有一個臥底就把你的加密方式出賣了。

因為網際網路傳輸的對接方數量和頻率非常高,顯然搞個對稱性密碼是不安全的。於是,基於對稱性密碼延伸出「非對稱密碼」的概念。

1. 公私鑰——籤名驗籤及加解密原理

通俗的解釋:A要給B發信息,B先把一個箱子給A,A收到之後把信放進箱子,然後上鎖,上鎖了之後A自己也打不開,取不出來了,因為鑰匙在B的手裡,這樣即使路上被截取了,別人也打不開箱子看裡面的信息,最後B就能安全地收到A發的信了,並且信息沒有洩露。

現在我們以一個單向的A發信息給B的場景進行深入了解公私鑰工作原理。

發送者和接收者都有2套加解密的方法,而且他們把其中一套加密方法a和解密方法b都公開(虛線標黑);這裡提到的加解密,因為密碼學過於深奧,無法解釋。大家需默認加密方法是不能反推出解密方法的,解密方法是不能反推出加密方法的。a加密就必須a解密,b加密就必須b解密;現在A需要向B發送一條信息,因為信息的內容很重要,他就用接收者B的加密方法c進行加密,這樣只有B自己的解密方法c才能解開,任何人獲取了都解開不了,包括A自己也解不開;在A向B發送信息的同時,需要帶上自己的籤名,這個時候A用自己才知道的加密方法b進行加密,因為任何人都知道解密方法b,所以任何人都可以看到A的籤字,也就是任何人都知道這條是A發出來的信息,但因為籤名不是不能公開的信息,所以被解密了也沒有關係。總結:

(1)籤名會被任何人獲取,但因為籤名內容不涉及核心內容,被獲取破解是OK的。

(2)重要內容只能接收方解密,任何人獲取了都無法解密。

(3)接收者B只有驗證籤名者是A的信息,才會執行接下來的程序。阿貓阿狗發來的信息不予執行。

搗局者C可能的情況:

(1)他獲取到這條信息是A發出的,但看不明白加密的內容。

(2)他可以也用接受者B的加密方法c向接收者B發信息,但他無法冒充發送者A的籤名,所以B不會接受C的請求。

(2)公私鑰的非對稱加密+session key對稱加密

2. 公私鑰的非對稱加密+session key對稱加密

上一小節解釋的公私鑰加密是標準和安全的,但因為這類非對稱加密對系統運算的需求比較大,在保證安全的前提下,還是儘量希望提升程序響應的時效。所以目前主流應用的另一種加密方式是公私鑰的非對稱加密+session key對稱加密。

當A向B發送信息的時候,不需要用到B的公私鑰。A用自己的加密方法b加密籤名和一條空信息,因為信息無關重要,被破解了也沒關係,B利用解密方法b驗證了是A發來的信息。這個時候,接收者B用發送者A的加密方法a,加密一個有時效的加密方法給A(相當於告訴A,這2個小時,我們用這個暗號進行溝通),因為只有A有解密方法,所以別人獲取了也不能知道session key是什麼。A接收到session key了以後,A用這種有時效的加密函數發送重要信息,籤名仍用加密方法b加密,B用同樣一個加密函數解密(實際上變成了對稱加密,大家都用同樣的方式加解密)2小時後,再重複第2步,更新加密方法。

3. 總結

(1)當B向A發出臨時有效的加密方法之後,通訊的過程變為了對稱加密;

(2)這類加密方式的核心是時效性,必須在短時間內更新,否則固定的規律容易被獲取破解。

搗局者C可能的情況:

(1)他獲取到B發出的session key的加密文件,無法破解session key是什麼。因為解密方法在A手上;

(2)通過各種手段,C破解出session key的加解密方法,但因為時效已到,session key更新,C徒勞無功;

(3)C在時效內破解出session key,但無法冒充A的籤名。

以上是2種常見的加解密方式,每個開放平臺會在概述中最開始介紹API調用的安全加解密方法,這是每個對接過程中必須的準備流程,如微信企業平臺在概述中就已介紹利用第2種方法(企業微信命名為access_token)進行加解密傳輸。

三、最後

以上就是API籤名驗籤和加解密的基本原理,接下來我會繼續更新API的請求方式等問題,同時以企業微信,微信開放平臺等大型開放平臺的業務解釋各平臺支持的現有功能。

綜上,水平有限,如有紕漏,敬請指出。

作者:就是愛睡覺;已任職電商和金融業行業的產品崗位3年時間,目前業務以TO B業務為主,文章是用於記錄自己在產品工作的思考和想法,希望有想法的小夥伴共同交流。

本文由 @就是愛睡覺 原創發布於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

相關焦點

  • php - Api 接口寫法規範和要求
    參數說明和示例apidoc 支持如下關鍵字:(下面 [ ] 中括號中表示是可選寫的內容,使用時不用加 [ ] 中括號。)通過@apiVersion區分,否者後面@api會覆蓋前面定義的@api@apiDescription text    接口描述,支持html語法@apiParam [(group)] [{type}] [field=defaultValue] [description]    詳細介紹見: http:    @apiVersion verison    接口版本,major.minor.patch
  • usdt支付api接口—優盾錢包
    現在很多企業或者應用程式都開放自己的open api,以便於技術開發人員調用方便,並且很多企業採用詳細接口文檔的形式進行輸出,或者採用sdk文檔方式打包。自上線以來,安全運行700+天,交易所用戶遍及中國、中國臺灣、日、韓、美國、澳大利亞及加拿大等國家和地區,累計為用戶管理資產總額達100000000+USDT,用戶日均交易額達2000萬USDT。 接下來,以它為例, 來解答usdt錢包接口對接怎麼實現,對接步驟如何實現,支付接口如何對接的困惑。
  • 快遞寄件下單api接口-順豐中通圓通申通韻達京東一次性對接
    1.1.5 流程示意圖1.1.6 名詞定義1.2 籤名說明1.2.1 關於籤名快遞鳥和第三方電子商務公司系統進行對接,有一定的安全機制。採用IP認證加籤名的方式對接,具體方案如下:1.防止數據被篡改在POST請求中會傳遞5個必須(R)參數RequestData==數據內容(URL編碼:UTF-8)EBusinessID==用戶IDRequestType=請求指令類型
  • 關於調用接口的詳細說明
    第二步,打開谷歌插件PostMan調用接口(先調用獲取access_token的接口,在調用獲取電站信息列表的接口)。請使用這個顏色的PostMan插件奧!!第一步 ,調用獲取access_token的接口,調用地址為 :http://api.wyqcd.net:8004/OAuth/Token,在Header中配置請求方式Content-Type為application/x-www-form-urlencoded,以Post方式請求,配置Post參數,client_id:telds7t15qrwgw7gu5owclient_secret:
  • 3分鐘短文:太爽了,用Laravel寫API接口!
    引言我們一直在講,通過路由傳達到控制器,處理好數據並渲染到視圖,但是對於現代的應用, 前後端分離的情況下,後端寫個接口就完事兒了。本期為大家說一說用laravel寫restful風格的API,看看能有多簡單。以路由開端寫API接口,與傳統的渲染前端模板頁面有什麼區別?
  • 寄快遞在線下單寄件|上門取件|快遞單號查詢接口-快遞鳥API
    (6)接口地址: API測試地址:http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.jsonAPI正式地址:http://api.kdniao.com/api/OOrderService
  • [視頻] 九大API接口,有哪些呢?
    只要你註冊一個帳號,回復一下帖子就可以看到今天要分享的視頻教程【PHP與九大接口實戰視頻教程】,此套教程講解9大api接口實戰。總共80節,比較適合新手或者適合複習,有需要的直接到以下連結,回覆帖子即可獲取課程目錄如下:一 支付寶,QQ,簡訊接口01.接口初步.wmv02.支付寶接口籤約.wmv03.支付寶接口SDK的下載和配置.wmv04.支付寶接口集成.wmv05.QQ互聯接口的籤約.wmv
  • magic-api 0.4.8 發布,接口快速開發框架
    一元運算符,支持非布爾值運算 修複函數命名atPercent變更為asPercent項目介紹magic-api 是一個基於Java的接口快速開發框架,通過magic-api提供的UI界面完成編寫接口,無需定義Controller
  • 什麼是第三方支付接口api?第三方支付接口申請需要提供什麼資料?
    什麼是第三方支付接口api?第三方支付接口api的出現,告別了繁瑣的支付通道的接入流程,提供了多種通道的支付接口集成,就是從事技術行業者說的函數。簡單的說api接口程序就是整合市面所有的支付通道,全力給合作方提供多途徑通道、傾情打造以網際網路為支撐的全新營銷渠道,實現資源共享、風險共擔的全新網絡支付程序。 它功能齊全、覆蓋範圍廣,貨幣流通順暢,支持網銀支付,開通了最安全最廣泛的交易快捷通道。有了網銀支付這一功能,我們的在線交易就得到全面完善,從而就給人們帶來多種多樣的在線交易方式。
  • magic-api 0.5.3 發布,接口快速開發框架
    #I29LQG 修復未攜帶參數的BUG 修復引入組件瀏覽器會報錯的問題 修復底部組件渲染不正確的問題 修復注入不了db模塊的BUG 修復db.page方法會報錯的BUG 修復前端忽略版本更新時會再次提示的BUG 修復保存接口時可能會報空指針的
  • 如何保障 API 接口的安全性?
    常見的做法對關鍵欄位加密比如用戶密碼直接通過 md5 加密;現在主流的做法是使用 https 協議,在 http 和 tcp 之間添加一層加密層( SSL 層),這一層負責數據的加密和解密。3.數據籤名增加籤名就是我們在發送 HTTP 請求的時候,增加一個無法偽造的字符串,用來保證數據在傳輸的過程中不被篡改。數據籤名使用比較多的算法是 MD5 算法,這個算法是將要提交的數據,通過某種方式組合成一個字符串,然後通過 MD5 算法生成一個籤名。
  • obgame分享:電競LOL數據API接口-API調用
    分享使用 OBGAME電競數據 接口調用的示例代碼,接的是英雄聯盟的【選手基本信息】接口.接口請求地址:http://api.xxe.io/?LCK分為春季賽和秋季賽,", "match_num": "8", "match_sorting": "2", "match_type": "2", "match_bonus": "1億韓元", }, { "match_id": "103",
  • 菏澤數據平臺api接口
    菏澤數據平臺api接口簡介:PolySearch 2.0 (PolySearch .ca)是一個在線文本挖掘系統,用於識別人類疾病、基因、蛋白質、藥物、代謝物、毒素、代謝途徑、器官、組織、亞細胞細胞器、積極健康效應、消極健康效應、藥物作用、GO terms、網格術語、ICD-10醫學編碼、生物分類法和化學分類法之間的關係。
  • Python——用 Django 寫 restful api 接口
    我用的 pymsql,pymsql 是 Python 中操作MySQL 的模塊,其使用方法和 MySQLdb 幾乎相同。但目前在 python3.x 中,PyMySQL 取代了 MySQLdb。接口使用 rest_framework,rest_framework 是一套基於 Django 的 REST 框架,是一個強大靈活的構建 Web API 的工具包。
  • 啥,聽說你用了springboot,但是開發的接口還在裸奔?
    帶來的所有便利,其在springmvc的基礎上提供了額外的功能增強,如下圖所示1.1.2 PopularMVC項目組件架構解析架構圖組件介紹主要分為以下幾類組件支持自定義系統錯誤碼、業務錯誤碼支持業務錯誤碼自動生成支持業務錯誤碼以異常的方式拋出,系統自動處理API響應自動包裝預處理器API響應錯誤碼和系統參數定製化轉換器請求參數解密器響應參數加密器系統參數自動填充器響應參數國際化翻譯器系統參數校驗器請求參數校驗器數字籤名請求驗籤器
  • 支付寶新版接口集成流程,不會的同學趕緊來看看
    2.下載支付寶籤名工具: https://docs.open.alipay.com/200/106120,解壓後如下圖。3.打開RSA籤名驗籤工具,選擇RSA2方式生成公鑰,私鑰。然後去後臺將自己的私鑰上傳。網址:https://openhome.alipay.com/platform/detailApp.htm?
  • Generate Api Plus v1.0.6 發布,自動生成接口文檔的 IDEA 插件
    New features簡介《Generate Api Plus》是一款可以自動生成接口文檔的IDEA插件。包括基於Spring註解的RESTful接口和用於定義dubbo api的普通接口。其中,RESTful接口將自動上傳並託管在內網部署的YApi伺服器上,而普通接口則以markdown文件的形式保存在指定目錄。
  • 開放平臺:搭建API安全預警平臺
    二、風險防範方式 api安全問題主要有數據的傳輸安全問題、數據安全問題、伺服器安全問題。 1. 傳輸安全 接口傳輸風險可能會導致接口被隨意調取、傳輸劫持等。
  • 深入探討:贛州api數據採集接口
    贛州api數據採集接口V33.0更新內容: 1、優化多線程模塊,默認線程數改成1個。 2、通用接口增加按順序和隨機兩種查詢模式選項。 3、增加退回件狀態顯示/統計/篩選。 4、增加籤收狀態的顯示規則自定義功能。 5、將高級設置調整到常用工具欄中。 6、加強郵政快遞包裹識別能力。V32.2更新內容: 1、獨立接口增加多線程快速查詢功能。
  • Rocket-API 2.3.0.RELEASE,API 敏捷開發框架
    , 內置市面常見的資料庫驅動,在頁面上動態管理多數據源配置 ,可用作統一的數據接口平臺,效果截圖:更多信息查看:開啟頁面配置功能多數據源配置rocket-api-platform 數據接口平臺軟體介紹: