Ejemplo n.º 1
0
        /// <summary>
        /// 创建授权文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            DateTime     time = Convert.ToDateTime(EndTime.Text);
            ILicenseData data = new ILicenseData
            {
                CompanyName = CompanyName.Text,
                DomainName  = DomainName.Text,
                Guid        = Guid.Parse(guid.Text),
                Count       = Convert.ToInt32(Count.Text),
                UnixEndTime = DateHelper.DateTimeToUnix(time)
            };

            LicenseHelper.CreateLicense(data);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 查看授权文件信息
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void btnView_Click(object sender, EventArgs e)
 {
     Alert(Label3, "", "");
     if (FileUpload1.HasFile && FileUpload1.PostedFile.ContentLength > 0)
     {
         try
         {
             ILicenseData data = LicenseHelper.DecryptLicense(FileUpload1.PostedFile.InputStream);
             this.SetFormValue(data);
         }
         catch
         {
             Alert(Label3, "文件无效!", "line1px_2");
         }
     }
     else
     {
         Alert(Label3, "未选择文件!", "line1px_2");
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 生成授权文件
        /// </summary>
        /// <param name="data"></param>
        public static void CreateLicense(ILicenseData data)
        {
            Int32  count = data.Count;
            String json  = JsonConvert.SerializeObject(data);

            Byte[] buffer = Encoding.UTF8.GetBytes(json);

            #region 7z压缩加密

            Byte[] zipBuffer   = Encoding.UTF8.GetBytes(Math.Pow(3, count / 2).ToString("0"));
            String zipPassword = MD5Upper32(String.Join("&", zipBuffer));

            SevenZipCompressor zip = new SevenZipCompressor()
            {
                DefaultItemName   = "license",
                EncryptHeaders    = true,
                FastCompression   = true,
                ScanOnlyWritable  = true,
                CompressionLevel  = CompressionLevel.High,
                CompressionMethod = CompressionMethod.Lzma2
            };

            using (MemoryStream stream = new MemoryStream(buffer))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    zip.CompressStream(stream, ms);
                    //zip.CompressStream(stream, ms, zipPassword);

                    ms.Position = 6;//去掉7z头文件信息
                    buffer      = new Byte[ms.Length - ms.Position];
                    ms.Read(buffer, 0, buffer.Length);
                }
            }

            #endregion

            Array.Reverse(buffer, 0, buffer.Length);//反转流

            #region DES在次加密

            for (int i = 1; i <= count; i++)
            {
                String[] arr = new String[5];
                for (int j = 2; j < 7; j++)
                {
                    String v1 = Math.Pow(j, i).ToString("0");
                    arr[j - 2] = v1;
                }
                String key = MD5Upper32(String.Join("#", arr));
                buffer = EncryptDES(buffer, key);
            }

            #endregion

            #region 文件尾写入加密次数

            Byte[] byt = new Byte[] { (Byte)count };
            buffer = buffer.Concat(byt).ToArray();

            #endregion

            #region 输出文件

            String base64 = Convert.ToBase64String(buffer, Base64FormattingOptions.InsertLineBreaks);

            Byte[]        head = new Byte[256];
            StringBuilder sb   = new StringBuilder(256);
            sb.AppendLine("Warning: Please don't delete or modify this file.");
            sb.AppendLine("Have any questions, please contact the author.");
            sb.AppendLine();
            sb.AppendLine("author:Jin Jia You Email:[email protected]");
            Encoding.UTF8.GetBytes(sb.ToString()).CopyTo(head, 0);

            HttpResponse Response = HttpContext.Current.Response;
            Response.Clear();
            Response.ContentType     = "text/plain";
            Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
            Response.AddHeader("Content-Disposition", "attachment; filename=license.txt");

            using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.UTF8))
            {
                sw.Write(Encoding.UTF8.GetString(head));
                sw.WriteLine();
                sw.Write(base64);
            }

            Response.Flush();
            Response.End();

            #endregion
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 解密授权文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static ILicenseData DecryptLicense(Stream file)
        {
            Int32 count = 0;

            Byte[] buffer = new Byte[] { };

            file.Position = 256 + 4;
            using (BinaryReader br = new BinaryReader(file, Encoding.UTF8))
            {
                Byte[] byt    = br.ReadBytes((int)(file.Length - file.Position));
                String base64 = Encoding.UTF8.GetString(byt);
                byt = Convert.FromBase64String(base64);

                count  = byt[byt.Length - 1];      //读取加密次数
                buffer = new Byte[byt.Length - 1]; //读取加密正文
                Array.Copy(byt, buffer, buffer.Length);
            }

            #region DES解密

            for (int i = count; i >= 1; i--)
            {
                String[] arr = new String[5];
                for (int j = 2; j < 7; j++)
                {
                    String v1 = Math.Pow(j, i).ToString("0");
                    arr[j - 2] = v1;
                }
                String key = MD5Upper32(String.Join("#", arr));
                buffer = DecryptDES(buffer, key);
            }

            #endregion

            Array.Reverse(buffer, 0, buffer.Length);

            #region 7z解密

            Byte[] zipBuffer   = Encoding.UTF8.GetBytes(Math.Pow(3, count / 2).ToString("0"));
            String zipPassword = MD5Upper32(String.Join("&", zipBuffer));

            using (MemoryStream stream = new MemoryStream())
            {
                stream.Write(new Byte[] { 0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C }, 0, 6);
                stream.Write(buffer, 0, buffer.Length);
                using (SevenZipExtractor zip = new SevenZipExtractor(stream, zipPassword))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        zip.ExtractFile(0, ms);
                        buffer = ms.ToArray();
                    }
                }
            }

            #endregion

            String       json = Encoding.UTF8.GetString(buffer);
            ILicenseData data = JsonConvert.DeserializeObject <ILicenseData>(json);
            return(data);
        }