我正在尝试保护用户在一系列记事卡上提交的数据。加密/解密将(希望)发生在浏览器中,因此用户可以控制尽可能多的安全过程。
我发现了一个很棒的 AES 库(https://github.com/mdp/gibberish-aes)。不幸的是,我依靠用户来创建加密密钥,所以我想要一个慢得多的算法。有很多散列库(比如 PHP 的 PHPPass),但我需要一些双向的东西。
我也对其他想法持开放态度。我只需要找到解决方案。
我正在尝试保护用户在一系列记事卡上提交的数据。加密/解密将(希望)发生在浏览器中,因此用户可以控制尽可能多的安全过程。
我发现了一个很棒的 AES 库(https://github.com/mdp/gibberish-aes)。不幸的是,我依靠用户来创建加密密钥,所以我想要一个慢得多的算法。有很多散列库(比如 PHP 的 PHPPass),但我需要一些双向的东西。
我也对其他想法持开放态度。我只需要找到解决方案。
您将加密算法与密钥派生混合在一起。您不希望您的加密算法变慢,因为 AES 不存在使用适当密钥进行暴力破解的风险。
大概既然您说“用户创建加密密钥”,您的意思是这是一种使用密码作为密钥的方案?PBKDF2是推荐的方法,并在 SP800-132 中获得 NIST 的批准
既然你有这个标记的 Javascript,它看起来像crypto-js支持 PBKDF2
当您从用户那里获得密码/密码时,您需要生成一个 salt 并从 PBKDF2 派生实际的 AES 密钥。它不需要是双向的,因为相同的输入(密码、盐和轮数)将始终生成相同的密钥。
请注意,即使这也不是一个设计合理的密码系统。您不应该在没有CBC 或 CTR mode的情况下使用 AES ,并且您仍然需要对您的数据进行 MAC 处理(或使用GCM,这两者都会处理)。