/// <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); }
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); }
/// <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); }
/// <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); } }
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); }
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")); }
/// <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); }
/// <summary> /// 功能:查询用户或注册卡信息 /// </summary> /// <param name="cmdData">可包函的单元</param> /// <returns>返回信息:是明文单元集</returns> public static string Search(string cmdData) { string rData = SoftXLic.KS_CMD("search", cmdData); return(rData); }
/// <summary> /// 功能:给帐号充值,仅用户密码模式软件需使用本接口 /// </summary> /// <param name="cmdData">可包函的单元</param> /// <returns>返回信息:是明文单元集</returns> public static string CZ(string cmdData) { string rData = SoftXLic.KS_CMD("cz", cmdData); return(rData); }
/// <summary> ///功能:注册用户帐号,仅用户密码模式软件需使用本接口 /// </summary> /// <param name="cmdData">可包函的单元</param> /// <returns>返回信息:是明文单元集</returns> public static string Reg(string cmdData) { string rData = SoftXLic.KS_CMD("reg", cmdData); return(rData); }
/// <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); }
/// <summary> /// 获取软件在服务器上设置的数据 /// </summary> /// <returns></returns> public static string Get() { string rData = SoftXLic.KS_CMD("get", ""); return(rData); }