Encryption AES密码存储问题

Encryption AES密码存储问题,encryption,cryptography,Encryption,Cryptography,我想加密一些用户配置文件信息。 当一个用户注册时,我使用他提供的密码,我用零将其填充到16位,以获得AES所需的密钥长度16位。如果密码没有16位长度,那么我用该密钥加密他的所有数据配置文件。我知道,在这一点上,我的AES密钥将是安全的,因为除了用户自己之外,没有人知道它们 当用户登录时,我使用他的密码执行相同的16位处理并解密他的数据。我遇到的问题是密码恢复,如果用户忘记了密码,数据将永远丢失。有没有更好的方法或工作来解决这个问题 谢谢 您的AES密钥派生不安全,您应该使用密码哈希,或者更准确

我想加密一些用户配置文件信息。 当一个用户注册时,我使用他提供的密码,我用零将其填充到16位,以获得AES所需的密钥长度16位。如果密码没有16位长度,那么我用该密钥加密他的所有数据配置文件。我知道,在这一点上,我的AES密钥将是安全的,因为除了用户自己之外,没有人知道它们

当用户登录时,我使用他的密码执行相同的16位处理并解密他的数据。我遇到的问题是密码恢复,如果用户忘记了密码,数据将永远丢失。有没有更好的方法或工作来解决这个问题


谢谢

您的AES密钥派生不安全,您应该使用密码哈希,或者更准确地说,使用基于密码的密钥派生函数-PBKDF,而不是使用零填充。密码与密钥不同,密钥应包含128个或更多随机位

您可以使用随机数据密钥加密数据,而不是恢复密钥或密码。然后,您可以依次使用用户的密钥加密此数据密钥。您还可以使用RSA公钥对数据密钥进行加密,您可以将私钥安全地保存在分离存储中或后台的某个位置。一个密钥与另一个密钥的加密称为密钥包装


有些数据您可能希望对用户保密,在这种情况下,只需在后台不使用公钥加密即可。您可以在用户的位置而不是服务器上加密此类数据。

我投票将此问题作为离题回答,因为这是关于加密工程的,属于crypto.stackexchange.com。这里的另一点是,您可能混淆了位和字节。。。此外,您的密钥派生方法是不安全的,因为您可能从ascii字节派生,只需添加零位。。。这会减少键空间。。。在这里使用更安全的东西。。。像PBKDF2一样,如果除了拥有数据的人之外没有人能看到它,我会问存储配置文件信息有什么价值。为什么要收集你从未使用/无法使用的数据?你建立了一个只写的内存。你误解了我,关键是:AES密钥存储在哪里。如果我遵循我的逻辑,我不需要关心存储它,唯一的问题是当用户丢失密码时,所有加密的数据都会丢失。这就是我一直在寻找解决方案的原因。