【问题标题】:Query for searching in database based on text box and a string基于文本框和字符串在数据库中搜索的查询
【发布时间】:2014-04-28 01:40:39
【问题描述】:

所以我正在尝试使用通过文本框输入的用户名和存储为字符串的密码来搜索我的数据库(用户将密码输入到文本框中,并对其进行了一些加密操作,加密密码然后存储为字符串;这个字符串是我用来搜索数据库的,因为数据库中存储了加密的密码)

该命令适用于通过文本框输入的用户名字符串,但是当我直接使用派生的密码字符串时它不起作用。我认为以下代码行中的语法错误会带来麻烦:

Dim cmd As OleDbCommand = New OleDbCommand
    ("SELECT * FROM UserInfo 
    WHERE [User ID] = '" & txtLoginID.Text & "' 
    AND [EncryptedPassword] = '" & EncPasswordString & "' ", con)

EncPasswordString 是存储通过各种操作获取的加密密码的字符串。我需要将此字符串与数据库中的 EncryptedPassword 进行比较。谢谢!

这是我用来获取 EncPasswordSting 的:

        i = 0

    While (PLength > 0)
        charofP = sHex(i)
        ascvalue = Strings.Asc(chartest)
        decvalue = Convert.ToDecimal(ascvalue)
        shiftdecvalue = decvalue + 1
        asctochar = ChrW(shiftdecvalue)
        emptychararray(i) = asc
        i = i + 1
        PLength = PLength - 1
    End While

    EncPasswordString = Convert.ToString(emptychararray)

【问题讨论】:

  • 不要将 SQL 字符串塞入 OldDBCommand,而是将其设为字符串变量。当它在运行时构建时,您将能够在调试器中获取值。尝试将生成的 SQL 字符串粘贴到 SQL 窗口中……然后从那里调试它。
  • 我会尝试,但我真的很想编辑上面给出的行。
  • “不起作用”是一个错误的诊断。你得到什么错误?如果您只是得到一个空白结果集,那么这不是语法错误。此外,Sql Injection 很糟糕,等等。如果您不知道那是什么,请查找并相应地修复您的代码。
  • 看看你的字符集。如果您以 ASCII 格式输入文本,但字符串存储为 UTF-X,这可能会导致一些问题。
  • 错误是:“System.Data.dll 中发生'System.Data.OleDB.OleDbException' 类型的未处理异常

标签: sql .net vb.net


【解决方案1】:

当然,它根本不起作用。正如你所说,密码是加密的。用你的话来说(“但是当我直接使用派生的密码字符串时它不起作用。”)你有两个选项来验证并使其工作:

  1. Encrypt 输入密码并与数据库中的密码进行比较。
  2. Decrypt检索后的密码并与输入的密码进行比较。

请分享您在调试时拥有的SQL command text

【讨论】:

  • 所以现在我正在尝试按照您的方法 1:加密输入密码并将其与数据库中已加密的密码库进行比较。我成功地加密了输入密码并将其存储在一个字符串(EncPasswordString)中,但我不能做的是在读取数据库内容的 sql 语句中使用该字符串。我认为这与没有 .text 有关,但我不确定。
  • 您可以!只需将加密的输入密码用作常规文本即可。让我解释一下..当您存储密码时,您正在使用某种算法进行加密!现在,当您在文本框中输入密码并单击提交时,只需使用您在存储密码时使用的算法加密输入密码,并且在加密输入密码后,只需将其作为通常的字符串与存储的值进行比较到数据库中。该集..!请让我知道你是否需要任何许可..! :)
猜你喜欢
  • 2018-02-21
  • 2019-08-07
  • 1970-01-01
  • 2019-12-09
  • 2018-10-29
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
相关资源
最近更新 更多