Esempio n. 1
0
        /// <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
            });
        }