C#软件注册码相关(一)

参考1

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;

using System.Security.Cryptography;

using System.Management;

/// <summary>

/// Hasher 的摘要说明

/// </summary>

///

namespace Hasher

{

 

public class Hasher

{

 

// private byte[] _HashKey; //哈希密钥存储变量

public string _HashText; //待加密的字符串

// public Hasher()

// {

// }

 

 

// 需要产生加密哈希的字符串

public string HashText

{

set

{

_HashText = value;

}

get

{

return _HashText;

}

}

 

/// 使用MD5CryptoServiceProvider类产生哈希值。不需要提供密钥。

/// </summary>

/// <returns></returns>

public string MD5Hasher()

{

byte[] MD5Data = System.Text.Encoding.UTF8.GetBytes(HashText);

 

MD5 Md5 = new MD5CryptoServiceProvider();

 

byte[] Result = Md5.ComputeHash(MD5Data);

 

return Convert.ToBase64String(Result); //返回长度为字节字符串

}

 

 

//获取cpu序列号

public String GetCpuID()

{

ManagementClass mc = new ManagementClass("Win32_Processor");

ManagementObjectCollection moc = mc.GetInstances();

 

String strCpuID = null;

foreach (ManagementObject mo in moc)

{

strCpuID = mo.Properties["ProcessorId"].Value.ToString();

break;

}

return strCpuID;

}//end method

//获取硬盘序列号

public String GetDriveID()

{

string driveSerialNum = "";

Scripting.FileSystemObjectClass MySystem = new Scripting.FileSystemObjectClass();

foreach (Scripting.Drive MyDriver in MySystem.Drives)

{

string SerialNumber = "";

try

{

SerialNumber = MyDriver.SerialNumber.ToString();

driveSerialNum = driveSerialNum + SerialNumber;

}

catch (Exception ex)

{

 

}

 

}

 

return driveSerialNum;

}

 

public String strJia()

{

string strJiami = "";

strJiami = GetCpuID() + GetDriveID();

 

return strJiami;

}

public string jiqixuelie;

public string duijiqima = null;

///得到机器码

public string hashGetDriveID()

 

{

Hasher hs = new Hasher();

 

hs.HashText = hs.strJia();

string jiqi = hs.MD5Hasher();

duijiqima = jiqi.Substring(8, 5);

return duijiqima;

}

 

public string Sern()

//最终的序列号//m为配置文件值

//x为序列号值

//css进行比较该注册码是否正确

{

 

 

//888888888888888888888888888888888获取机器码

Hasher hs = new Hasher();

 

//88888888888888888888888888888888888888888888888888获取序列号

Hasher hash = new Hasher();

hash.HashText = hs.hashGetDriveID().ToString ();

jiqixuelie = hash.MD5Hasher();

return jiqixuelie;

}

 

}

 

参考2

using   System;  

using   System.Data;  

using   System.Data.OleDb;  

using   System.Text;  

using   System.Security.Cryptography;  

using   Microsoft.Win32;  

using   System.Configuration;

 

 ///   <summary>  

 ///   加密数据 

 ///   </summary>  

 ///   <param   name="Text"></param>  

 ///   <param   name="sKey"></param>  

 ///   <returns></returns>  

 private   string   EnText(string   Text,string   sKey)  

 {  

         StringBuilder   ret=new   StringBuilder();  

         try  

         {  

              DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();  

              byte[]   inputByteArray;  

              inputByteArray=Encoding.Default.GetBytes(Text);  

              //通过两次哈希密码设置对称算法的初始化向量 

              des.Key   =   ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile  

              (System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,   "md5").Substring(0,8),"sha1").Substring(0,8));  

              //通过两次哈希密码设置算法的机密密钥 

              des.IV   =   ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile  

              (System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,   "md5").Substring(0,8),"md5").Substring(0,8));  

              System.IO.MemoryStream   ms=new   System.IO.MemoryStream();  

              CryptoStream   cs=new   CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);  

              cs.Write(inputByteArray,0,inputByteArray.Length);   

              cs.FlushFinalBlock();  

              foreach(   byte   b   in   ms.ToArray())  

              {  

                   ret.AppendFormat("{0:X2}",b);  

              }  

              return   ret.ToString();  

         }  

         catch  

         {  

              return   "";  

         }  

 }

 

 ///   <summary>  

 ///   解密数据 

 ///   </summary>  

 ///   <param   name="Text"></param>  

 ///   <param   name="sKey"></param>  

 ///   <returns></returns>  

 private   string   DeText(string   Text,string   sKey)  

 {  

         try  

         {  

              DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();   //定义DES加密对象 

              int   len;  

              len=Text.Length/2;  

              byte[]   inputByteArray   =   new   byte[len];  

              int   x,i;  

              for(x=0;x<len;x++)  

              {  

                   i   =   Convert.ToInt32(Text.Substring(x   *   2,   2),16);  

                   inputByteArray[x]=(byte)i;  

              }  

              //通过两次哈希密码设置对称算法的初始化向量 

              des.Key   =   ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile  

              (System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,   "md5").Substring(0,8),"sha1").Substring(0,8));  

              //通过两次哈希密码设置算法的机密密钥 

              des.IV   =   ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile  

              (System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,   "md5").Substring(0,8),"md5").Substring(0,8));  

              System.IO.MemoryStream   ms=new   System.IO.MemoryStream();//定义内存流 

              CryptoStream   cs=new   CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);//定义加密流 

              cs.Write(inputByteArray,0,inputByteArray.Length);  

              cs.FlushFinalBlock();  

              return   Encoding.Default.GetString(ms.ToArray());  

         }  

         catch  

         {  

              return   "";  

         }  

 }

 

 ///   <summary>  

 ///   将加密的字符串转换为注册码形式 

 ///   </summary>  

 ///   <param   name="input">要加密字符串</param>  

 ///   <returns>装换后的字符串</returns>  

 public   string   transform(string   input,string   skey)  

 {  

         string   transactSn=string.Empty;  

         if(input   ==   "")  

         {  

              return   transactSn;  

         }  

         string   initSn=string   .Empty;  

         try  

         {  

              initSn=this.EnText(this.EnText(input,skey),skey).ToString();  

              transactSn=initSn.Substring(0,5)   +   "-"   +initSn.Substring(5,5)   +    

              "-"   +   initSn.Substring(10,5)   +   "-"   +   initSn.Substring(15,5)   +    

              "-"   +   initSn.Substring(20,5);    

              return   transactSn;  

         }  

         catch  

         {  

              return   transactSn;  

         }  

 }

原文地址:https://www.cnblogs.com/chenbg2001/p/1525947.html