2014-04-28 40 views
0

因此,我试图通过文本框和密码存储为字符串(用户输入他们的密码到文本框中输入用户名输入的用户名搜索我的数据库,一些操作是为了加密而完成的,然后加密的密码被存储为一个字符串;这个字符串就是我用来搜索数据库的地方,因为数据库中存有加密的密码)基于文本框和字符串在数据库中搜索的查询

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

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) 
+0

不要将SQL字符串干扰到OldDBCommand中,而是将其设置为字符串变量。在运行时构建它时,您将能够在调试器中获取该值。尝试将生成的SQL字符串粘贴到SQL窗口中...并从此处进行调试。 –

+0

我会尝试,但我真的很想编辑上面给出的行。 – user2016082

+0

“不起作用”是一个不好的诊断。你得到的错误是什么?如果你只是得到一个空白的结果集,那么它不是一个语法错误。此外,Sql注入是坏的,等等等等等等。如果你不知道它是什么,请查看并相应地修复你的代码。 –

回答

0

Offcourse它不会在所有的工作。你说密码是加密的。在你的话(“但是当我直接使用导出密码字符串这是行不通的。”)有两个选项来验证和使其工作:

  1. Encrypt输入密码,并与DB密码进行比较。
  2. Decrypt检索后的密码并与输入的密码进行比较。

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

+0

发生类型'System.Data.OleDB.OleDbException'未处理的异常所以现在我试图按照你的方法1:加密输入密码,并将其与从我的数据库中已经加密的密码银行我成功地加密了输入密码并将其存储在一个字符串(EncPasswordString)中,但我不能做的是在sql语句中使用该字符串来读取数据库中的内容。它有一些与没有.text有关,但我不知道。 – user2016082

+0

你可以!只需使用加密的输入密码作为常规文本。让我解释一下。当你存储密码时,你使用某种算法进行加密!现在,当您在文本框中输入密码并单击提交时,只需使用您在存储密码时使用的算法对输入密码进行加密,并且在加密输入密码后,只需将其与通常的stri将存储的值存入数据库。该集..!请让我知道你是否需要任何通关..! :) –