## 1.?**加密數據**?:
按照優先級,應該選擇:
(1) 首選 NaCl庫,或者libsodium庫,使用里面的crypto_secretbox()/crypto_secretbox_open() 函數 (2) Chacha20-Poly1305 算法 (3) AES-GCM 算法
適用場景:當你需要避免把明文數據在網絡上傳輸的時候。
以上3種算法,都是AEAD類的算法,AEAD是2015年最好的選擇。 其中的(2)和(3)在結構上類似:一個流加密模式的算法,配合一個多項式結構的MAC。 (2)是一個流加密算法,配合一個為通用cpu優化的MAC算法, 對密碼學庫的實現者來說,Poly1305也比GCM更容易安全地實現。 AES-GCM是工業標準(TLS目前主要用的就是AES-GCM),現代CPU通常都有專門為AES-GCM設計的硬件指令,但是在沒有硬件指令支持的CPU上(比如32位的arm),(3)性能低于(2)。
此外,應該
* 避免AES-CBC(說來話長,后文有解釋)
* 避免AES-CTR
* 避免64bit塊大小的塊加密算法—(說的就是你—BlowFish)
* 避免OFB模式
* 不要使用RC4,RC4已經被攻破