<?phpclass Sign{
    static function mySign($para,$key,$secret)
    {
        $para_filter = self::paraFilter($para);
    
        $para_sort = self::argSort($para_filter);
        $mysign = self::buildMysign($para_sort, $key,$secret);
    
        return $mysign;
       
    
    }
    static function paraFilter($para) {
        $para_filter = array();
        foreach($para as $key=>$value){
            if($key == "sign" || $key == "filter" || $value == "")continue;
            else    $para_filter[$key] = $para[$key];
        }
        return $para_filter;
    }
    static function argSort($para) {
        ksort($para);
        reset($para);
        return $para;
    }
    static function buildMysign($sort_para,$key,$secret) {
         $prestr=$key;
        $prestr =  $prestr.self::createLinkstring($sort_para);
        $prestr = $prestr.$secret;
        //$prestr= utf8_encode( $prestr);
        $mysign = strtoupper(sha1($prestr));
       
        return $mysign;
    }
    static function createLinkstring($para) {
        $arg  = "";
        foreach ($para as $key=>$value){
            $arg .= $key.$value;
        }
      
    
        return $arg;
    }
}
?>PHPC#

解决方案 »

  1.   

    大致是这样吧    public class Sign
        {
            public static string mySign(Dictionary<string, string> para, string key, string secret)
            {
                var para_filter = paraFilter(para);            var para_sort = argSort(para_filter);            var mysign = buildMysign(para_sort, key, secret);            return mysign;
            }        private static Dictionary<string, string> paraFilter(Dictionary<string, string> para)
            {
                var para_filter = new Dictionary<string, string>();            foreach (var item in para)
                {
                    if (item.Key.Equals("sign") || item.Key.Equals("filter") || item.Value.Equals("")) continue;
                    para_filter.Add(item.Key, item.Value);
                }
                return para_filter;
            }        private static Dictionary<string, string> argSort(Dictionary<string, string> para)
            {
                return para.OrderBy(p => p.Key).ToDictionary(p => p.Key, p => p.Value);        }        private static string buildMysign(Dictionary<string, string> sort_para, string key, string secret)
            {
                var prestr = key;            prestr = prestr + createLinkstring(sort_para);            prestr = prestr + secret;            //$prestr= utf8_encode( $prestr);            SHA1 sha = new SHA1CryptoServiceProvider();
                string mysign = BitConverter.ToString(sha.ComputeHash(Encoding.UTF8.GetBytes(prestr))).ToUpper();            return mysign;
            }        private static string createLinkstring(Dictionary<string, string> para)
            {
                string arg = "";
                foreach (var item in para)
                {
                    arg += item.Key + item.Value;
                }            return arg;
            }
        }