Encryption 加密:在根本不存储密钥时,是否需要对密钥进行加密?
我搜索了整个网络,包括这里:有很多关于在散列和存储密码之前对密码进行加密的讨论 如果密码用于计算用于加密的密钥(“基于密码的加密”):如果不将密码存储在al怎么办Encryption 加密:在根本不存储密钥时,是否需要对密钥进行加密?,encryption,hash,aes,salt,sha,Encryption,Hash,Aes,Salt,Sha,我搜索了整个网络,包括这里:有很多关于在散列和存储密码之前对密码进行加密的讨论 如果密码用于计算用于加密的密钥(“基于密码的加密”):如果不将密码存储在al怎么办 [注:我确实读过:这肯定是一个相关的问题:我不确定这里讨论的初始化向量与这里的问题有何关系] 假设: 用于加密 用户输入主密码 这是SHA256散列,输出用于AES256加密文件 哈希没有存储(显然主密码也没有存储) 用于解密 用户输入主密码 这是SHA256散列,输出用于解密文件 如果解密成功,密码显然是正确的 我的问题: 当不
- [注:我确实读过:这肯定是一个相关的问题:我不确定这里讨论的初始化向量与这里的问题有何关系]
- 这可能会降低散列冲突的可能性
- 这需要储存盐
- 如果salt丢失/损坏,用户将无法再解密文件
- 如何在步骤3中检查解密是否成功:这是否需要知道部分文件内容
- 如果是这样,那么在加密文件中存储已知值的错误有多大(这并非总是可以防止的-攻击者可能会猜到,例如,用户的姓氏在文件中的某个位置加密了-可能是正确的)
至于检查文件是否已正确解密,只需确保使用类似PKCS7的填充。解密最后一个块时,将检查填充以确保其格式正确。如果解密失败,则填充将无法正确格式化,您将得到一个“填充失败”错误。清除答案,不存储,不腌制。另外,我正在使用PKCS7填充和检查:当提供了不正确的密钥时,common cryptor确实很好地返回了一个错误;无需检查文件内容。更新:后者不再为真。CCCrypt现在总是返回成功。如果设置了
NoPadding
,则将接受任何旧垃圾。最好检查您的设置,然后故意尝试使用不正确的密钥解密。