C# 如何在解密数据之前检查密码

C# 如何在解密数据之前检查密码,c#,.net,security,encryption,C#,.net,Security,Encryption,我正在创建一个需要以加密形式存储用户数据的程序。用户在加密之前输入密码,需要再次提供密码以检索数据。如果有大量数据,解密需要一段时间 现在,我想在解密之前检查用户是否输入了正确的密码。此检查需要快速,而解密过程不需要 如何在实际完成解密过程之前检查密码?我曾考虑将密码的散列存储为加密文件的前几个字节—这将非常简单和快速—但我不确定这是否会影响安全性 我正在使用.NET和内置的加密类。好吧,加密散列不应该损害安全性,只要它是咸的并且具有合理的复杂性;不过,就我个人而言,我可能会尝试设置它,以便数据

我正在创建一个需要以加密形式存储用户数据的程序。用户在加密之前输入密码,需要再次提供密码以检索数据。如果有大量数据,解密需要一段时间

现在,我想在解密之前检查用户是否输入了正确的密码。此检查需要快速,而解密过程不需要

如何在实际完成解密过程之前检查密码?我曾考虑将密码的散列存储为加密文件的前几个字节—这将非常简单和快速—但我不确定这是否会影响安全性


我正在使用.NET和内置的加密类。

好吧,加密散列不应该损害安全性,只要它是咸的并且具有合理的复杂性;不过,就我个人而言,我可能会尝试设置它,以便数据损坏(由于密码不正确)在早期很明显

是否有可能定期在数据中注入校验和?或者,如果流表示记录,您是否可以使用迭代器(
IEnumerable
etc)读取它,以便它延迟读取并提前中断


编辑)也-在它能够判断密码是否正确之前,强制它解密一个非平凡的数据块(但不是整个流),这足以让它难以使用暴力。如果它只需要处理前128个字节(或其他任何字节),那么它的速度可能足够快,值得一试(字典等)。但是对于常规使用(一次尝试,密码正确或错误),它应该不会对性能产生影响。

我想您是在使用密码作为加密/解密过程的一种盐。最简单的方法是加密一些标准短语,或者可能是用户作为输入字符串提供的密码,密码与salt用于加密过程的密码相同。当用户想要解密数据时,将该密码作为解密过程的盐,并使用ot对加密密码进行解密。如果您重新获得密码,则用户已提供正确的密码,您可以继续解密过程,否则会通知用户其密码不正确

这一进程将是:

  • 用户为加密提供的密码和数据
  • 您使用密码作为salt来加密密码。并将其存储为加密的\u密码
  • 使用密码加密数据并将其存储
用户返回时会向您提供密码

  • 您可以用salt密码解密加密的密码
  • 如果结果等于密码,则解密数据,否则通知用户

但加密密码(而不是散列密码)足以让我思考:“我这样做对吗?”。存储一个实际的密码(甚至是加密的)并不理想。谢谢-我想我会尝试使用每记录校验和。正如你所指出的,我应该能够及早发现腐败。