想将表中的一个字段加密,如何做呢?
搜索了好多,现在知道有三个函数,encrypt pwdencrypt pwdcompare
我这样做了,想将原来的密码用这个函数修改:
update table set passwd = encrypt(passwd) 
passwd 是字段名,table 是表名。
这样改了以后,密码变了,请教大家,如何做呢?
可以在数据表中直接处理吗?

解决方案 »

  1.   

    Create table #users(userId int,pwd varbinary(255))
    Insert #users(1,varbinary(255),pwdencrypt('mypassword')
    Declare @pwd varbinary(255)
    select @pwd = pwd from #users where userId = 1
    If pwdcompare('mypassword',@pwd) = 1 
     print 'true'
    else
     print 'false'
      

  2.   

    感谢xzq111() ,非常感谢您的回答。
    实在不好意思,我运行时有错误。
    还有就是我的表结构是这样的:
    CREATE TABLE [Da_user] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [username] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [password] [binary] (20) NULL ,
    [purview] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
    [userlogin] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [bz] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
    原来password是varchar类型的,现在我改成了binary类型
    已经可以保密了,但是如果再改回varchar类型,又可以看到密码了。
    也就是说可以将password这个字段直接显示成密文吗?也就是说即便是varchar类型,也是看不到明文的,可以实现吗?
      

  3.   

    请问gaojier1000(高捷),如何编写函数呢?我的水平低,不知道您是否有成型的函数?
      

  4.   

    不好意思,我在我的测试环境中copy时考错了。下面语句是没有问题的
    Create table #users(userId int,pwd varbinary(255))
    GO
    Insert #users values(1,convert(varbinary(255),pwdencrypt('mypassword')))
    Declare @pwd varbinary(255)
    select @pwd = pwd from #users where userId = 1
    If pwdcompare('mypassword',@pwd) = 1 
     print 'true'
    else
     print 'false'
    另外由于pwdcompare函数是用varbinary类型进行比较的,所以还是使用varbinary来得简单。