select pwdcompare('testpassword',pwdencrypt('testpassword'),0)
select pwdcompare('testpassword',pwdencrypt('Testpassword'),1)

解决方案 »

  1.   

    保存的时候这样:
    UPDATE T_PASSWORD
    SET    PASSWORD = convert(varbinary(256), pwdencrypt(:ls_NewPass))
    WHERE  USER_ID = :ls_Login ;
    比较的时候这样:
    select @result = pwdcompare(@password,password)
    from t_password 
    where user_id = :user_id;
    其中@password是用户输入的密码。
    如果@result= 1,说明密码正确。
      

  2.   

    加密的结果是不同,但是不影响与明文值的比较。
    怎么比较?举个例子,用户的密码是11111,我利用pwdencrypt()函数加密后得到密码数据是0x010037513A55B6CD34DF14E6F9B161E0A894281B80A540B62B3BB6CD34DF14E6F9B161E0A894281B80A540B62B3B,我把这个密文数据保存到数据库对应的密码项,然后当用户登录时,我怎么来比较?
    用pwdcompare('11111',pwdencrypt('11111')来比较吗?这样没有意义啊,我是想跟我保存的数据来比较,有什么方法可以实现吗?
      

  3.   

    处理方式:用DES,3DES,MD5等方式加密后,密码存储在数据库中。
    用户验证的时候,再把用户输入的密码加密,直接和数据库加密后存储的字符比较。
    相等,允许登录,不相等,拒绝登录。注意:MD5是不可逆的。所以用户看到数据库中存储的字符串,也不知道他的用户密码是多少。
      

  4.   

    我有个问题请教:比如有个不法用户进入了数据库,把他知道的密码MD5后替换了原来的密码MD5值,是不是就做到了非法访问的目的??
      

  5.   

    lanyu_84(G) ,当然是啊lltp2002 ()  ,每次都要做比较的,使用pwdcompare函数进行比较,方法就是libin_ftsafe(子陌红尘:当libin告别ftsafe)所说的,而不是对输入的密码pwdencrypt后与数据库中保存的加密密码进行比较,因为pwdencrypt每次的值都是不一样的不建议使用pwdencrypt,万一平台移植就不好办
      

  6.   

    比较方法:
    DECLARE @OldPWD varchar(255) 
    DECLARE @EncryptedPWD varbinary(255)
    SET @OldPWD = '11111'
    SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@OldPWD))
    SELECT pwdcompare(@OldPWD, @EncryptedPWD)
    SELECT pwdcompare('22222', @EncryptedPWD)