예제 #1
0
        /// <summary>
        /// chkPass功能:对ks_cmd的check命令的基本验证的一个包装函数,里边的效验方法可以自己添加或修改
        /// </summary>
        /// <param name="connect">参数connect:为0时自动判断是否连接服务器,为1时强制连接服务器 </param>
        /// <returns></returns>
        public static string chkPass(int connect = 0)
        {
            string sData, randomstr, Srandomstr, errinfo;

            randomstr = SoftXLic.GetRandomString();
            sData     = SoftXLic.KS_CMD("check", "<randomstr>" + randomstr + "</randomstr><connect>" + connect.ToString() + "</connect>");
            sData     = SoftXLic.FD_(sData);
            if (SoftXLic.GD_(sData, "state") != "100")
            {
                errinfo = SoftXLic.GD_(sData, "message");
                errinfo = errinfo + "---" + SoftXLic.GD_(sData, "webdata");
                MessageBox.Show(errinfo, "验证失败");
                SoftXLic.KS_CMD("exit", "");
                return("");
            }
            else
            {
                Srandomstr = SoftXLic.GD_(sData, "randomstr"); // '服务端返回的randomstr
                if (Srandomstr != randomstr)                   //'验证成功,要对数据读取和安全效验了
                {
                    SoftXLic.KS_CMD("exit", "");
                    return("");
                }
            }
            return(sData);
        }
예제 #2
0
        public static string _myDecrypt(string inData)
        {
            //******下面的代码是服务器上的加密方法

            /* function __myEncrypt($data){
             *
             *   if(isset($_GET['r'])){
             *      //客户端设置KS_CMD("set", "<rsa>0</rsa>")会执行下列加密算法
             *       $rc4密钥2 = _rs(2);
             *       $rc4密钥3 = _rs(3);
             *       $rc4加密 = rc4byte($rc4密钥2,$data);
             *       $rc4加密 = rc4byte($rc4密钥3,$rc4加密);
             *       $base64编码数据 = base64_encode($rc4加密);   //必须base64_encode
             *       return $base64编码数据;
             *   }else{
             *       //客户端不设置KS_CMD("set", "<rsa>0</rsa>")就会执行下列加密算法
             *       $rc4密钥 = _rs(2);     //取ADVAPI字符串资源第二行字符串做为rc4密钥,当然也可以使用make_key()随机生成一个。
             *       $rsa加密的rc4密钥 = encode_rsa2(_rs(1),$rc4密钥);//对rc4密钥进行rsa加密,
             *       $加密后的数据 = base64_encode(rc4byte($rc4密钥,$data));   //对data数据进行rc4加密,然后再base64编码
             *       $返回数据 = $rsa加密的rc4密钥 . ',' . $加密后的数据;使用‘,’合并密钥和加密数据,然后返回客户端 ,
             *       return $返回数据;
             *   }
             * }*/
            //*****下面的代码是服务器第一种加密方式进行解密的算法
            //string rc4key = "";
            //byte[] str1, str2;
            //byte[] base64 = SoftXLic.Base64Decode(inData);
            //rc4key = "FC7fx6KbzwmBJ98pAiEArOz2Kej";
            //str1 = SoftXLic.rc4(rc4key, base64);
            //rc4key = "CIQDirubbjUUwuvO86IaeFFI0oXFa";
            //str2 = SoftXLic.rc4(rc4key, str1);
            //return System.Text.Encoding.Default.GetString(str2);

            //*****下面的代码是服务器第二种加密方式进行解密的算法
            string publicKey = "<RSAKeyValue><Modulus>wkX6jOTuOc+r2d9XuPybqWWXWCySTdQl33zo8HWoSoKuLz8+HKSpslcoy1MMyw07GA7sclODMZ/m1KtHy/FYrw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
            string rc4enkey  = "";
            string rc4endata = "";

            if (inData.Split(',').Length == 2)
            {
                rc4enkey  = inData.Split(',')[0];
                rc4endata = inData.Split(',')[1];
            }
            else
            {
                return("开发者自己设置返回的错误");
            }
            byte[] deData = SoftXLic.Base64Decode(rc4endata);         //进行base解码
            string rc4key = SoftXLic.RSADecrypt(rc4enkey, publicKey); //对rc4enkey使用rsa进行解密

            byte[] byteData = SoftXLic.rc4(rc4key, deData);           //使用rc4key对deData进行解密
            string data     = System.Text.Encoding.Default.GetString(byteData);

            return(data);
        }
예제 #3
0
        /// <summary>
        /// 软件信息初始化
        /// </summary>
        /// <returns></returns>
        public static string Initialize()
        {
            string data = SoftXLic.Lickey
                          + SoftXLic.Softcode
                          + SoftXLic.Softhead
                          + SoftXLic.Softhead
                          + SoftXLic.ClientSoftver
                          + SoftXLic.IniName;
            string result = SoftXLic.Set(data);

            return(result);
        }
예제 #4
0
        /// <summary>
        /// 扣点函数,调用advapi接口实现扣点功能。成功返回剩余的点数。失败返回-1
        /// </summary>
        /// <param name="v_poins"></param>
        /// <param name="v_errinfo"></param>
        /// <returns></returns>
        public static int kpoints(int v_points, ref string v_errinfo)
        {
            string sData;
            int    c;

            sData = SoftXLic.advapi("v_points," + v_points.ToString());
            c     = int.Parse(sData);
            if (c == 0)// ' 返回值不是整数或为0就说明扣点失败
            {
                v_errinfo = sData;
                return(-1);
            }
            else
            {
                v_errinfo = "扣点成功";
                return(c);
            }
        }
예제 #5
0
        public static string FD_(string ioData)
        {
            string data_s = "";

            byte[] b64buff;
            if (ioData.StartsWith(SoftXLic._softhead))            //检查字符串是否是密文
            {
                ioData  = ioData.Replace(SoftXLic._softhead, ""); //去除密文标识头
                data_s  = SoftXLic._myDecrypt(ioData);
                b64buff = SoftXLic.Base64Decode(data_s);
                return(System.Text.Encoding.Default.GetString(b64buff));;
            }
            else
            {
                if (!ioData.StartsWith("<xml>"))
                {
                    return("<xml><state>140</state><message>DLL内部错误,返回的数据异常" + ioData + "</message></xml>");
                }
            }
            return(ioData);
        }
예제 #6
0
        public static string advapi(string advapicmd)
        {
            string sData, randomstr, Srandomstr, errinfo;

            randomstr = SoftXLic.GetRandomString();
            sData     = SoftXLic.KS_CMD("check", "<randomstr>" + randomstr + "</randomstr><advapi>" + advapicmd + "</advapi>");
            sData     = SoftXLic.FD_(sData);
            if (SoftXLic.GD_(sData, "state") != "100")
            {
                errinfo = SoftXLic.GD_(sData, "message");
                errinfo = errinfo + "---" + SoftXLic.GD_(sData, "webdata");
                return(errinfo);
            }
            else
            {
                Srandomstr = SoftXLic.GD_(sData, "randomstr");
                if (Srandomstr != randomstr)
                {
                    SoftXLic.KS_CMD("exit", "");
                }
            }
            return(SoftXLic.GD_(sData, "advapi"));
        }
예제 #7
0
        /// <summary>
        ///	服务端主程序用(即登陆器进程),启动IPC进程通讯服务
        /// </summary>
        /// <param name="cmdData">可包函的单元</param>
        /// <returns>返回信息:是明文单元集</returns>
        public static string IPC_Start(string cmdData)
        {
            string rData = SoftXLic.KS_CMD("ipc_start", cmdData);

            return(rData);
        }
예제 #8
0
        /// <summary>
        ///	功能:查询用户或注册卡信息
        /// </summary>
        /// <param name="cmdData">可包函的单元</param>
        /// <returns>返回信息:是明文单元集</returns>
        public static string Search(string cmdData)
        {
            string rData = SoftXLic.KS_CMD("search", cmdData);

            return(rData);
        }
예제 #9
0
        /// <summary>
        ///	功能:给帐号充值,仅用户密码模式软件需使用本接口
        /// </summary>
        /// <param name="cmdData">可包函的单元</param>
        /// <returns>返回信息:是明文单元集</returns>
        public static string CZ(string cmdData)
        {
            string rData = SoftXLic.KS_CMD("cz", cmdData);

            return(rData);
        }
예제 #10
0
        /// <summary>
        ///功能:注册用户帐号,仅用户密码模式软件需使用本接口
        /// </summary>
        /// <param name="cmdData">可包函的单元</param>
        /// <returns>返回信息:是明文单元集</returns>
        public static string Reg(string cmdData)
        {
            string rData = SoftXLic.KS_CMD("reg", cmdData);

            return(rData);
        }
예제 #11
0
        /// <summary>
        /// check命令为基础验证功能, 返回信息的原始单元集出错时为原文,验证通过为密文
        /// </summary>
        /// <param name="cmdData">可包函的单元</param>
        /// <returns>
        ///当state等于100时返回的是单元集加密后的数据,需解密(未连接服务器本地验证时返回的是明文)
        ///当state大于100时返回的是单元集是明文单元集无需解密
        /// </returns>
        public static string Check(string cmdData)
        {
            string rData = SoftXLic.KS_CMD("check", cmdData);

            return(rData);
        }
예제 #12
0
        /// <summary>
        /// 获取软件在服务器上设置的数据
        /// </summary>
        /// <returns></returns>
        public static string Get()
        {
            string rData = SoftXLic.KS_CMD("get", "");

            return(rData);
        }