## 3.?**對稱簽名**:
應該選擇 HMAC 類的算法
適用場景:安全加固一個API,如各種開放API的調用方認證
如果對一個API,你需要做認證(authenticating),但是不需要做加密(encrypting),記得千萬不要自己發明算法,你自己發明的MAC算法基本都有安全漏洞,如果不信,請Google一下 “長度擴展攻擊”?[長度擴展攻擊](http://en.wikipedia.org/wiki/Length_extension_attack)?[Flickr的漏洞案例](http://netifera.com/research/flickr_api_signature_forgery.pdf)
同時,必須要注意的是,要使用一個**常數時間字符串對比算法**(這個地方和碼農的常識完全相反,請務必留意)
此外,應該
* 避免自行設計的“帶密碼的hash”結構,你的設計基本都是有安全漏洞的
* 避免HMAC-MD5,避免HMAC-SHA1,使用HMAC-SHA256, HMAC-SHA512等
* 避免復雜的多項式MAC
* 避免加密hash值的結構
* 避免CRC