首先,我想说这只是一个学习练习,我不打算在生产中使用它。

encrypt(plaintext string, password string)decrypt(encrypted string, password string)

加密步骤如下:

  1. 生成随机 256 位用作盐

  2. 生成 128 位用作初始化向量

  3. 使用 PDKDF2 从密码和盐生成 32 位密钥

  4. 用密钥和明文生成一个 32 位的 HMAC,并将其附加到明文的开头

  5. 在CFB模式下用AES加密hmac+plaintext

返回的字节数组如下所示:

[256 bit salt] [128 bit iv] encrypted([256 bit hmac] [plaintext])

解密时:

  1. 提取盐并使用提供的密码来计算密钥

  2. 提取IV并解密密文的加密部分

  3. 从解密值中提取mac

  4. 用明文验证mac

我还不够疯狂,无法在任何生产项目中使用我自己的加密脚本,所以请向我指出任何为我执行此操作的库(相对安全的简单密码/消息加密)