我的.net程序要php的discuz整合,discuz有个ucenter接口,不过是php写的没办法调用,所以我想直接操作ucenter的数据库,我主要用c#实现两个方法,php的代码如下 function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
$regip = empty($regip) ? $this->base->onlineip : $regip;
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($password).$salt);
$sqladd = $uid ? "uid='".intval($uid)."'," : '';
$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
$uid = $this->db->insert_id();
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
return $uid;
} function check_login($username, $password, &$user) {
$user = $this->get_user_by_username($username);
if(empty($user['username'])) {
return -1;
} elseif($user['password'] != md5(md5($password).$user['salt'])) {
return -2;
}
return $user['uid'];
}现在的问题就是用户密码加密,我在C#用md5按照上面的方式加密,加密出来的和php的完全不一样。
例如在php里一个用户名是“admin” 密码是“admin” Salt是“6b8be5” 产生出来的密文是“d5fc01b88fde516a574c83fecaf6bd79”。我改成C#后加密出来的密码什么样都有,我开始怀疑是编码问题因为discuz是gbk编码,结果改了gbk、utf8都不行,出来的不一样。问问这方面的高手怎么解决??

解决方案 »

  1.   

    产生的密文跟用户名没关系
    php里“.”跟c#里“+”类似
      

  2.   

    MD5加密 
            public static string Encryption(string str)
            {
                try
                {
                  
                    byte[] byteValue = Encoding.UTF8.GetBytes(str);
                    MD5 crypto = new MD5CryptoServiceProvider();
                    byte[] hashValue = crypto.ComputeHash(byteValue);            
                    StringBuilder hashedText = new StringBuilder();
                    for (int i = 0; i < hashValue.Length; i++)
                    {
                        hashedText.AppendFormat("{0:X2}", hashValue[i]);
                    }                return hashedText.ToString();
                }
                catch (Exception ex)
                {
                    StackFrame fr = new StackFrame(true);
                    Log.WriteLine(fr.GetMethod().ReflectedType.FullName + "_" + fr.GetMethod().Name, ex.Message, LogLevel.Error);
                    return "";
                }
            }
      

  3.   

    ToString(value,radix)是不是做了转换 以及检查编码