C# 加密和解密字符串(202011),第2部分:一致性和数据库检查

C# 加密和解密字符串(202011),第2部分:一致性和数据库检查,c#,mysql,encryption,cryptography,rijndael,C#,Mysql,Encryption,Cryptography,Rijndael,我有一个由其他人发布的另一个问题的后续问题 我试用了布雷特发布的代码,该代码获得了190张选票(正在统计)。我注意到,有可能使用相同的文本、salt和共享机密获得不同的加密结果。但是,不同的加密结果会解密到预期值 我的问题是,如果我加密各种数据库字段,那么如果没有一致性,我就无法加密用户给定的值,并在数据库的select语句中使用这些值。因此,以下代码将失败: SELECT `Id` FROM mySqlTable WHERE `userid` = 'encryptedentry1' AND `

我有一个由其他人发布的另一个问题的后续问题

我试用了布雷特发布的代码,该代码获得了190张选票(正在统计)。我注意到,有可能使用相同的文本、salt和共享机密获得不同的加密结果。但是,不同的加密结果会解密到预期值

我的问题是,如果我加密各种数据库字段,那么如果没有一致性,我就无法加密用户给定的值,并在数据库的select语句中使用这些值。因此,以下代码将失败:

SELECT `Id` FROM mySqlTable WHERE `userid` = 'encryptedentry1' AND `userpw` = 'encryptedentry2';

如何对列加密的数据库进行查询?

不应存储加密的密码,而应仅存储哈希。这里不需要加密用户名和/或在where子句中使用它。更好的方法是:使用一个可用的、开源的身份验证系统。DIY总是这里最大的风险。一个合理的加密函数每次都会因为一个随机的初始化向量而产生不同的密文。在CBC模式下使用静态IV在某种程度上等同于ECB模式,这是不安全的;也许你见过“欧洲央行企鹅”?我对加密和密码学相对来说是个新手,所以不能发表评论,除非我在代码中看到了IV。我完全可以每次都用不同的密文。我发现这是一条艰难的道路。我的问题是如何在查询中使用它?我想我刚刚想到了答案,即同时使用哈希和安全加密。是的,因为加密的可重复性是一个弱点。对于散列,这是一个基本要求
Hash(用户名+密码)=storedunphash
解决您的登录问题。