我在C#中有一些用于创建新密码的代码:
SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn);
现在,这将从文本框txtNewPass1中获取文本值,并使用pwdencrypt对其进行加密,然后将另一部分代码放入数据库(该位使用参数)。
然而,问题是上面的代码没有 - 实际上似乎无法做到。使用参数(而不是txtNewPass1.Text)似乎由于某种原因带回了错误的值(实际上,我现在想知道我是否可以通过将txtNewPass1.Text放入字符串,然后通过参数传递它来解决这个问题) 。至少在这种情况下,使用参数会给我们一个与我们的值不匹配的密码。
其他人之前遇到过这个?
答案 0 :(得分:5)
唱一个参数(而不是txtNewPass1.Text)似乎因某种原因带回了错误的值
您应该使用参数,除非绝对不可能这样做;任何“错误的价值”很可能是varchar
和nvarchar
之间的差异 - 所以要小心你知道你想要哪个,以及你使用的是什么(pwdencrypt('foo')
与{{pwdencrypt(N'foo')
不同1}})。也;考虑hashbytes
而不是pwdencrypt
。
答案 1 :(得分:4)
D'哦!我真的不想回答这个问题,因为我太尴尬了,但是嘿嘿......
SqlCommand cmd = new SqlCommand("select pwdencrypt(@MyPass)", Conn
我正在留下单引号,所以它试图加密('@ MyPass'),而不是(@MyPass)。因此每次它都将@MyPass加密为密码,而不是@MyPass表示为将其视为字符串。
忽略我,现在还太早。嗯......差不多午餐时间......