您的位置:程序门 -> .net技术 -> c#



如何将一段md5加密的密码存到sql中varbinery类型的字段中.(谁先解决给100分)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何将一段md5加密的密码存到sql中varbinery类型的字段中.(谁先解决给100分)
发表于:2007-03-05 17:42:26 楼主
如何将一段md5加密的密码存到sql中varbinery类型的字段中.
我的代码是
                public   int   insterok(string   _userid,   string   _pwd)
                {
                        bll   _bll   =   new   bll();
                        byte[]   bt   =   new   byte[16];
                        bt   =   system.text.encoding.default.getbytes(_bll.getmd5_str_32(_pwd));
                        try
                        {
                                string   sql   =   "insert   into   memb_info(memb___id   ,   memb__pwd   )   values(   @userid,   @pwd) ";
                                sqlcommand   mycmd   =   new   sqlcommand();
                                mycmd.connection   =   myconn;
                                mycmd.commandtext   =   sql;

                                mycmd.parameters.add( "@userid ",   sqldbtype.varchar   ,   10);
                                mycmd.parameters[ "@userid "].value   =   _userid;

                                mycmd.parameters.add( "@pwd ",sqldbtype.varbinary   ,16);
                                mycmd.parameters[ "@pwd "].value   =   bt;   ;
                                messagebox.show(bitconverter.tostring(bt));
                                myconn.open();
                                return   (int)mycmd.EXECutenonquery();
                               
                             
                        }
                        catch   (exception   ex)
                        {
                                debug(ex.tostring());
                                return   -99;
                        }
                        finally
                        {
                                myconn.close();
                        }
                }

比如密码是123456     md5加密后是e1adc3949ba59abbe56e057f2f883e但存到varbinery类型的字段中以后是4531414443333934394241353941424535364530353746324638383345
而不是原来的md5值
发表于:2007-03-05 17:45:571楼 得分:0
楼主看清楚没 "

    e   =   0x45;
    1   =   0x31;
    ....
发表于:2007-03-05 17:47:372楼 得分:0
简单地:

        convert.tochar(0x45)   就得到e了
发表于:2007-03-05 17:50:183楼 得分:0
那如何把md5值原样的存到数据库里那?
发表于:2007-03-05 17:59:024楼 得分:0
将字段类型改为varchar
发表于:2007-03-05 18:06:555楼 得分:0
必须用这个.数据库不是我设计的.不能改
发表于:2007-03-06 09:46:126楼 得分:0
要把md5值原样的存到数据库里,不改字段类型是不行的。
不过,你可以得到原来的字符串:system.text.encoding.default.getstring((byte[])ds.tables[0].rows[0][ "memb__pwd "])),和输入的密码加密后的字符串比较是否相等即可。
发表于:2007-03-06 10:08:327楼 得分:0
问题已经解决,但上面没有答案.不能散分.我把答案发出来大家一起学习.
                                string   strsql   =   "insert   into   memb_info(memb___id   ,   memb__pwd   )   values(   @userid,   @pwd) ";
                                sqlcommand   mycmd   =   new   sqlcommand(strsql   ,   myconn);

                                sqlparameter   paramusername;
                                paramusername   =   new   sqlparameter( "@userid ",   sqldbtype.varchar,   10);
                                paramusername.value   =   _userid;
                                mycmd.parameters.add(paramusername);


                                md5cryptoserviceprovider   md5hasher   =   new   md5cryptoserviceprovider();
                                byte[]   hashedbytes;
                                utf8encoding   encoder   =   new   utf8encoding();
                                hashedbytes   =   md5hasher.computehash(encoder.getbytes(_pwd));


                                sqlparameter   parampwd;
                                parampwd   =   new   sqlparameter( "@pwd ",   sqldbtype.binary,   16);
                                parampwd.value   =   hashedbytes;
                                mycmd.parameters.add(parampwd);
                                myconn.open();
                                return   mycmd.EXECutenonquery();
发表于:2007-03-06 10:28:518楼 得分:0
太复杂了,
发表于:2007-03-06 10:57:199楼 得分:0
为什么不能散分     接分
发表于:2007-03-06 11:29:2010楼 得分:0
来晚了


快速检索

最新资讯
热门点击