在MFC ODBC(non-unicode但是unicode-ware)环境中,我将一个128位的散列值(CString)存入SQL SERVER中的一个字段中(unicode nvarchar(255)型),但是再读出来之后和原来那个值不一样.有谁知道是什么原因啊?

解决方案 »

  1.   

    CString password = _T("123");//密码
    CString name = _T("shw");//用户名
    int len = password.GetLength();//密码长度
    unsigned char *pPassword = (unsigned char*)(LPCTSTR)password;//转化为unsigned char*
    unsigned char result[16];//存放散列值MD5 md5;//加密算法实例(crypto++类库)
    md5.Update(pPassword,len);//接收消息
    md5.Final(result);//计算散列值放入result
    CString cipher = (char*)result;//将result转化为CString//连接数据源(ODBC)
    CDatabase db;
    db.OpenEx(_T("DSN=CRDS;UID=sa;PWD=999199"),CDatabase::noOdbcDialog);//将记录插入数据库
    CString sql;
    sql.Format(_T("insert into user_info_tab(user_name,user_password)values( '%s ', '%s ')"),name,cipher);
    db.ExecuteSQL(sql);//读取密码
    CRecordset rs(&db); 
    rs.Open(CRecordset::dynaset,_T( "select user_password from user_info_tab where user_name = 'shw '"));
    CString temp;
    rs.GetFieldValue((short)0,temp);//断言测试(插入前的值和读取出来的值)
    assert(cipher == temp);//结果失败了!!!//我个人认为是下面的代码段问题,但是不知道什么问题
    MD5 md5;//加密算法实例(crypto++类库)
    md5.Update(pPassword,len);//接收消息
    md5.Final(result);//计算散列值(128位)放入result
    CString cipher = (char*)result;//将result转化为CString
    帮忙啊  在线等!!!