C# 如何在解密数据之前检查密码
我正在创建一个需要以加密形式存储用户数据的程序。用户在加密之前输入密码,需要再次提供密码以检索数据。如果有大量数据,解密需要一段时间 现在,我想在解密之前检查用户是否输入了正确的密码。此检查需要快速,而解密过程不需要 如何在实际完成解密过程之前检查密码?我曾考虑将密码的散列存储为加密文件的前几个字节—这将非常简单和快速—但我不确定这是否会影响安全性C# 如何在解密数据之前检查密码,c#,.net,security,encryption,C#,.net,Security,Encryption,我正在创建一个需要以加密形式存储用户数据的程序。用户在加密之前输入密码,需要再次提供密码以检索数据。如果有大量数据,解密需要一段时间 现在,我想在解密之前检查用户是否输入了正确的密码。此检查需要快速,而解密过程不需要 如何在实际完成解密过程之前检查密码?我曾考虑将密码的散列存储为加密文件的前几个字节—这将非常简单和快速—但我不确定这是否会影响安全性 我正在使用.NET和内置的加密类。好吧,加密散列不应该损害安全性,只要它是咸的并且具有合理的复杂性;不过,就我个人而言,我可能会尝试设置它,以便数据
我正在使用.NET和内置的加密类。好吧,加密散列不应该损害安全性,只要它是咸的并且具有合理的复杂性;不过,就我个人而言,我可能会尝试设置它,以便数据损坏(由于密码不正确)在早期很明显 是否有可能定期在数据中注入校验和?或者,如果流表示记录,您是否可以使用迭代器(
IEnumerable
etc)读取它,以便它延迟读取并提前中断
(编辑)也-在它能够判断密码是否正确之前,强制它解密一个非平凡的数据块(但不是整个流),这足以让它难以使用暴力。如果它只需要处理前128个字节(或其他任何字节),那么它的速度可能足够快,值得一试(字典等)。但是对于常规使用(一次尝试,密码正确或错误),它应该不会对性能产生影响。我想您是在使用密码作为加密/解密过程的一种盐。最简单的方法是加密一些标准短语,或者可能是用户作为输入字符串提供的密码,密码与salt用于加密过程的密码相同。当用户想要解密数据时,将该密码作为解密过程的盐,并使用ot对加密密码进行解密。如果您重新获得密码,则用户已提供正确的密码,您可以继续解密过程,否则会通知用户其密码不正确 这一进程将是:
- 用户为加密提供的密码和数据李>
- 您使用密码作为salt来加密密码。并将其存储为加密的\u密码
- 使用密码加密数据并将其存储
- 您可以用salt密码解密加密的密码李>
- 如果结果等于密码,则解密数据,否则通知用户