/// <summary> /// 校验License /// </summary> /// <param name="license"></param> static LicenseData ValidateLicense(string license) { if (string.IsNullOrEmpty(license)) { throw new LicenseException("License不可为空", 0); } var rsaProvider = new System.Security.Cryptography.RSACryptoServiceProvider(); rsaProvider.FromXmlString(_publicKey); var licenseDataStr = rsaProvider.DecryptUsePublic(license);//sample: hwId={string},ed={yyyy-MM-dd}; if (string.IsNullOrEmpty(licenseDataStr)) { throw new LicenseException("无效License, errorCode=1", 1); } var licenseData = licenseDataStr.Split(','); if (licenseData.Length != 3) { throw new LicenseException("无效License, errorCode=2", 2); } if (licenseData[0].Length < 4)//第1组数据SN,前3位为sn=,如果小于4位数据不正确,sn格式为XXXX-XXXX-XXXX-XXXX。 { throw new LicenseException("无效License, errorCode=3", 3); } if (licenseData[1].Length < 6)//第2组数据为硬件ID,前5位为hwId=,如果小于6位表示数据不正确。 { throw new LicenseException("无效License, errorCode=4", 4); } if (licenseData[2].Length < 4)//第3组数据为过期时间,前3位为ed=,如果小于4位表示数据不正确。 { throw new LicenseException("无效License, errorCode=5", 5); } var sn = licenseData[0].Substring(3); var hwId = licenseData[1].Substring(5); var localHardwareId = HardwareInfo.GetHardwareId(); if (!localHardwareId.Equals(hwId, StringComparison.OrdinalIgnoreCase)) { throw new LicenseException("无效License, errorCode=4,1", 41); } var ed = licenseData[2].Substring(3); var expiredDate = DateTime.Parse(ed); if (expiredDate < DateTime.Today) { throw new LicenseException("无效License, errorCode=5,1", 51); } return(new LicenseData { SerialNumber = sn, HardwareId = hwId, ExpiredDate = expiredDate }); }