## 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