描述
為了保證第三方應用與API服務器之間通信的安全性,防止Secret Key盜用、數據篡改等惡意攻擊行為,開放平臺API 服務器使用簽名機制,應用在調用開放平臺API,需要計算出一個簽名。
請求發起方式
通過應用客戶端發起的
通過頁面中的JavaScript、Flash內的ActionScript或手機、桌面客戶端程序發起。則簽名是由請求參數和Session Secret(每個用戶的Session Key所對應的密鑰)經過指定的加密算法生成的字符串。
通過第三方應用服務端發起的
簽名是由請求參數和應用的私鑰經過對應加密算法生成的。
簽名的生成
不進行簽名生成
不生成的簽名的情況也是存在,例如web站點開發前後端分離。但是由於基於session的特性,可以支持正常的業務處理,不過要進行一些必要的準備。
- 登陸驗證
- 採用post方式提交數據
- 構造token令牌,例如md5(uniqid(rand(), TRUE)),可以設置失效時間
- 驗證referer,同源策略規劃
- Api授權
- 等等
帶有簽名密鑰
請求增加key和sign參數,解決身份驗證和防止參數篡改問題 ,私鑰不要外洩。
- 分配對應的key、secret
- 簽名生成規則
- 請求參數新增時間戳 timestamp ,可以驗證請求是否過期。
- $secret 作加密使用, 為了保證數據安全,不要在請求參數中體現。
升級優化
對於安全相對高點的系統來講,簽名會採用自己指定的複雜規則,header,body都會做相應處理。例如企業報文,電子訂單信息等。
數據加密/編碼算法列表
參考:http://blog.sina.com.cn/s/blog_4f0322c50101ilml.html
1、常用密鑰算法
密鑰算法用來對敏感數據、摘要、簽名等信息進行加密,常用的密鑰算法包括:
- DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合;
- 3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
- RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;
- IDEA(International Data Encryption Algorithm)國際數據加密算法,使用 128 位密鑰提供非常強的安全性;
- RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件快的長度也是可變的;
- DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準);
- AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 算法;
- BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
- 其它算法,如ElGamal、Deffie-Hellman、新型橢圓曲線算法ECC等。
2、單向散列算法
單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:
- MD5(Message Digest Algorithm 5):是RSA數據安全公司開發的一種單向散列算法,MD5被廣泛使用,可以用來把不同長度的數據塊進行暗碼運算成一個128位的數值;
- SHA(Secure Hash Algorithm)這是一種較新的散列算法,可以對任意長度的數據運算生成一個160位的數值;
- MAC(Message Authentication Code):消息認證代碼,是一種使用密鑰的單向函數,可以用它們在系統上或用戶之間認證文件或消息。HMAC(用於消息認證的密鑰散列法)就是這種函數的一個例子。
- CRC(Cyclic Redundancy Check):循環冗餘校驗碼,CRC校驗由於實現簡單,檢錯能力強,被廣泛使用在各種數據校驗應用中。佔用系統資源少,用軟硬件均能實現,是進行數據傳輸差錯檢測地一種很好的手段(CRC 並不是嚴格意義上的散列算法,但它的作用與散列算法大致相同,所以歸於此類)。
3、其它數據算法
其它數據算法包括一些常用編碼算法及其與明文(ASCII、Unicode 等)轉換等,如 Base 64、Quoted Printable、EBCDIC 等。
閱讀更多 誰不曾年少輕狂 的文章
關鍵字: Flash ActionScript 算法