| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*******************************************************************************
- * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
- * 类的信息:
- * 1.程序名称:LockLicenseHandle.cs
- * 2.功能描述:License文件管理。
- * 编辑履历:
- * 作者 日期 版本 修改内容
- * 张国印 2014/09/16 1.00 新建
- *******************************************************************************/
- using System;
- using System.Data;
- using System.IO;
- using System.Management;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Security.Cryptography;
- using System.Text;
- using Dongke.IBOSS.PRD.Basics.Library;
- namespace Dongke.IBOSS.PRD.Service.DKIBOSSPRDLogic
- {
- /// <summary>
- /// License文件管理
- /// </summary>
- public class LockLicenseHandle
- {
- //private const uint ELEP_SUCCESS = 0x80000000; // 成功
- //private const uint ELEP_NO_MORE_DEVICE = 0x80000009; // 没有符合条件的设备
- //private const uint ELEP_ERR_INVALID_PASSWORD = 0x80010002; // 有锁,但PIN密码错
- //private const uint ELEP_INVALID_DEVICE_HANDLE = 0x80000004; // 传入的设备句柄无效
- //private const uint ELEP_ERROR_HW_ERROR = 0x80010001; // 硬件错误,可能由硬件损坏引起。
- //private const uint ELEP_ERR_INVALID_STATE = 0x80010009; // 无效状态,升级失败将会将设备置为无 效状态,升级成功可以解除无效状态。
- //private const uint ELEP_ERR_NO_PRIVILEGE = 0x80010006; // 无开发商权限。
- //private const uint ELEP_NOT_USER_DEVICE = 0x80000026; //设备不是用户设备。
- //private const uint ELEP_INVALID_PARAMETER = 0x80000001; //参数错误,可能因为传入了空指针。
- //private const uint ELEP_ERR_OPT = 0x80010003; //用户信息区已经写过一次。
- //private const uint ELEP_ERR_INVALID_ADDR_OR_SIZE = 0x80010004; //读写偏移量或长度错误。
- //private const ushort CUSTOMER_CODE_LENGTH = 100; // 写入锁内最长的客户编码字节数
- //private const ushort CUSTOMER_NAME_LENGTH = 600; // 写入锁内最长的客户名称字节数
- //private const ushort CUSTOMER_START_POINT = 1152; // 开始写锁区域
- //private const uint OLD_PIN_1 = 0x30303030;
- //private const uint OLD_PIN_2 = 0x30303030;
- //private const uint OLD_PIN_3 = 0x30303030;
- //private const uint OLD_PIN_4 = 0x30303030;
- private static string _uuid = null;
- /// <summary>
- /// 读取License文件内容
- /// </summary>
- /// <param name="lisenceFilePath">license文件路径</param>
- /// <param name="customer">读取的license内容</param>
- /// <returns>
- /// 0:读取成功
- /// -1:license文件不存在
- /// -2:license文件错误
- /// -3:license过期
- /// </returns>
- public static int ReadLisenceFile(string listCode, ref DataSet customer, out string licString)
- {
- licString = null;
- try
- {
- string sid = INIUtility.Instance(INIUtility.IniFile.Config).ReadIniData("DBSetting", "SID").ToUpper();
- string path = AppDomain.CurrentDomain.BaseDirectory + "LIC\\LIC_" + listCode + "_" + sid + ".lic";
- if (!File.Exists(path))
- {
- return -1;
- }
- string[] lics = File.ReadAllLines(path, Encoding.UTF32);
- string l1 = Encryption.DecryptDES(lics[0], "DK#LIC#CODE#SID");
- string[] keys = l1.Split('#');
- if (listCode != keys[1] || sid != keys[2].ToUpper())
- {
- return -2;
- }
- //licString = lics[1];
- string key = Encryption.DecryptDES(lics[1], "DK#CODE#" + keys[1].ToLower());
- string iv = Encryption.DecryptDES(lics[2], "DK#SID#" + keys[2].ToLower());
- string lic = Encryption.DecryptDES(lics[3], "DK#" + l1.ToUpper());
- MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(lic));
- memoryStream.Position = 0;
- BinaryFormatter formatter = new BinaryFormatter();
- Rijndael age = Rijndael.Create();
- CryptoStream cStream = new CryptoStream(memoryStream,
- age.CreateDecryptor(Convert.FromBase64String(key), Convert.FromBase64String(iv)),
- CryptoStreamMode.Read);
- DataSet data = (DataSet)formatter.Deserialize(cStream);
- if (listCode != data.Tables["Info"].Rows[0]["ListCode"]+"" ||
- sid != data.Tables["Info"].Rows[0]["SID"].ToString().ToUpper())
- {
- return -2;
- }
- if (data.Tables["UUID"].Rows.Count > 0)
- {
- string uuid = Encryption.EncryptDES(UUID + "_" + sid, sid);
- DataRow[] drs = data.Tables["UUID"].Select("UUID = '" + uuid + "'");
- if (drs == null || drs.Length == 0)
- {
- return -2;
- }
- }
- DateTime vBegin = Convert.ToDateTime(data.Tables["Info"].Rows[0]["ValidityBegin"]);
- DateTime vEnd = Convert.ToDateTime(data.Tables["Info"].Rows[0]["ValidityEnd"]);
- DateTime n = DateTime.Now.Date;
- if (n < vBegin || n > vEnd)
- {
- return -3;
- }
- licString = Convert.ToDateTime(data.Tables["Info"].Rows[0]["LicCreateTime"]).Ticks.ToString();
- customer = data;
- return 0;
- }
- catch (Exception)
- {
- return -2;
- }
- }
- public static string UUID
- {
- get
- {
- if (_uuid != null)
- {
- return _uuid;
- }
- try
- {
- string code = null;
- SelectQuery query = new SelectQuery("select * from Win32_ComputerSystemProduct");
- using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
- {
- foreach (var item in searcher.Get())
- {
- using (item)
- {
- code = item["UUID"].ToString();
- }
- }
- }
- _uuid = code;
- }
- catch
- {
- _uuid = "";
- }
- return _uuid;
- }
- }
- }
- }
|