首先,我想說這只是一個學習練習,我不打算在生產中使用它。我用 Golang 寫了一個小應用程序,有兩個功能:encrypt(plaintext string, password string)和decrypt(encrypted string, password string)加密步驟如下:生成隨機 256 位用作鹽生成 128 位用作初始化向量使用 PDKDF2 從密碼和鹽生成 32 位密鑰用密鑰和明文生成一個 32 位的 HMAC,并將其附加到明文的開頭在CFB模式下用AES加密hmac+plaintext返回的字節數組如下所示:[256 bit salt] [128 bit iv] encrypted([256 bit hmac] [plaintext])解密時:提取鹽并使用提供的密碼來計算密鑰提取IV并解密密文的加密部分從解密值中提取mac用明文驗證mac我還不夠瘋狂,無法在任何生產項目中使用我自己的加密腳本,所以請向我指出任何為我執行此操作的庫(相對安全的簡單密碼/消息加密)
1 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
請注意,因為問題是關于加密消息而不是密碼:如果您要加密小消息而不是散列密碼,那么 Go 的secretbox包(作為其 NaCl 實現的一部分)是要走的路。如果您打算推出自己的產品——我強烈建議不要這樣做,除非它留在您自己的開發環境中——那么 AES-GCM 是您的最佳選擇。
否則,以下大部分內容仍然適用:
對稱加密對密碼沒有用。您應該沒有理由需要返回明文——您應該只關心比較哈希值(或者更準確地說,派生鍵)。
與 scrypt 或 bcrypt 相比,PBKDF2 并不理想(2015 年的 10002 輪也可能有點低)。scrypt 是內存困難的,并且更難在 GPU 上并行化,并且在 2015 年,它的壽命足夠長,使其比 bcrypt 更安全(如果您的語言的 scrypt 庫不是很好,您仍然會使用 bcrypt )。
MAC-then-encrypt有問題- 您應該先加密 MAC。
鑒于#3,您應該在 AES-CBC + HMAC 上使用 AES-GCM(伽羅華計數器模式)。
Go 有一個很棒的bcrypt包和一個易于使用的 API(為你生成鹽;安全地比較)。
我還編寫了一個鏡像該包的scrypt包,因為底層 scrypt 包要求您驗證自己的參數并生成自己的鹽。
- 1 回答
- 0 關注
- 295 瀏覽
添加回答
舉報
0/150
提交
取消