Mình tham khảo được cách tạo license cho phần mềm ở đây, xin post lại để mọi người tham khảo (nếu cần). Bạn nào có cách thì post thêm lên nhé. Có lẽ đây cũng là chủ đề đáng được quan tâm.
Ý tưởng như sau:
-
Khi một máy nào đó cài phần mềm của bạn, thì máy đó cần gửi cho bạn một mã Request Activate Code
-
Dựa vào Request Active Code đã cung cấp thì bạn sẽ tạo một license cho
máy đó để import vào phần mềm thì mới sử dụng phần mềm được.
Các bước làm như sau:
-
đầu tiên bạn lấy series của ổ cứng của máy đang cài phần mềm bằng string output1 = ExecuteCommandSync(“vol”);
-
sau đó bạn mã hóa chuỗi output1 bằng phương pháp MD5: string output2 =ConvertStringToSecureCode(output1);
-
như vậy chuỗi output2 là Request Activate Code.
bây giờ tạo license cho Request Active Code vừa thu được ở trên:
-
bạn lấy output2 nối thêm với một chuỗi bí mật do bạn đặt ra: output2 =output2 +“chuỗi bí mật”;
-
sau đó đem cuỗi output2 mã hóa bằng MD5: string licensecode = ConvertStringToSecureCode(output2);
xong rồi, bạn đem licensecode này import vào phần mềm của máy đang chạy
là xong. Các hàm code mình để bên dưới cho các bạn tham khảo.
public static string ConvertStringToSecureCode(string Input1)
{
MD5 Secu1 = MD5.Create();
byte[] data1 = Secu1.ComputeHash(Encoding.Default.GetBytes(Input1));
StringBuilder sbd = new StringBuilder();
for (int i = 0; i <= data1.Length - 1; i++)
{
sbd.Append(data1[i].ToString("x2"));
}
return sbd.ToString();
}
public static string GetRequestLicenseCode()
{
string Hd1 = HardDiskSeriesNumber();
string Code1 =ConvertStringToSecureCode(temp1);
string Code2 = Code1.Substring(24).ToUpper();
string s5 = FormatLicenseCode(Code2);
return s5;
}
private static string HardDiskSeriesNumber()
{
string output = ExecuteCommandSync("vol");
string aa = output.Split('.')[output.Split('.').Length - 1];
string bb = aa.Split(' ')[aa.Split(' ').Length - 1];
return bb.ToString().ToUpper();
}
public static string ExecuteCommandSync(object command)
{
try
{
// create the ProcessStartInfo using "cmd" as the program to be run,
// and "/c " as the parameters.
// Incidentally, /c tells cmd that we want it to execute the command that follows,
// and then exit.
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
// Display the command output.
return result;
}
catch (Exception)
{
// Log the exception
return null;
}
}