程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 基於C#完成簡略離線注冊碼生成與驗證

基於C#完成簡略離線注冊碼生成與驗證

編輯:C#入門知識

基於C#完成簡略離線注冊碼生成與驗證。本站提示廣大學習愛好者:(基於C#完成簡略離線注冊碼生成與驗證)文章只能為提供參考,不一定能成為您想要的結果。以下是基於C#完成簡略離線注冊碼生成與驗證正文


重要思緒就是供給者持有密鑰,經由過程RSA加密客戶機標識或時光標識,再經由過程Base64加密成不太好看的注冊碼,然後分發給客戶機。

客戶機解Base64後,經由過程持有的公鑰來驗證注冊碼能否與本機標識或時光標知趣符。

1、 生成公密鑰

RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider();
File.WriteAllText("PrivateKey.xml", cryptor.ToXmlString(true));
File.WriteAllText("PublicKey.xml", cryptor.ToXmlString(false));

為了便利歷久保留這裡就直接存入文件了。

為了不客戶機公鑰喪失,我比擬偏向於將公鑰直接編譯到驗證法式中,然則如許也就意味著假如改換了密鑰,老的驗證法式就驗不了重生成的注冊碼了。

2、 生成注冊碼

 static string CreateRegCode(string mac, DateTime date)
 {
   RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider();
   cryptor.FromXmlString(File.ReadAllText("PrivateKey.xml"));
   string signature = String.Format("[{}][{}]", mac, date.ToString("yyyy-MM-dd"));
   byte[] regCodeBytes = cryptor.SignData(
     Encoding.UTF.GetBytes(signature),
     "SHA");
   return Convert.ToBaseString(regCodeBytes);
 }

這個辦法是經由過程加密MAC和日期的組合來生成注冊碼,須要留意幾點:

1.參數中的MAC是客戶機的地址2.第四行的文件是上一步生成的密鑰文件

3.因為只斟酌驗證,所以客戶機還必需曉得參數中的date

3、 驗證注冊碼

static bool Verify(string regCode)
 {
   const string PUBLIC_KEY = "";
   try
   {
     RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider();
     cryptor.FromXmlString(PUBLIC_KEY);
     byte[] signedData = Convert.FromBaseString(regCode);
 
     bool today = cryptor.VerifyData(
       Encoding.UTF.GetBytes(String.Format("[{}][{}]", DateTime.Now.ToString("yyyy-MM-dd"))),
       "SHA", signedData);
     bool machineToday = cryptor.VerifyData(
       Encoding.UTF.GetBytes(String.Format("[{}][{}]", MAC, DateTime.Now.ToString("yyyy-MM-dd"))),
       "SHA", signedData);
     bool forever = cryptor.VerifyData(
       Encoding.UTF.GetBytes(String.Format("[{}][{}]", MAC, Environment.MachineName)),
       "SHA", signedData);
     return today || machineToday || forever;
   }
   catch
   {
     return false;
   }
 }

這個辦法驗證了三品種型的注冊碼:當天可用、本機當天可用和永遠可用。

須要留意:

1.第三行的公鑰就是第一步的PublicKey.xml中的內容

2.十四和十七行的MAC是客戶機的物理地址,至於怎樣獲得不是本文的重點,請列位看官自行百度

3.斟酌到客戶機填寫的注冊碼有能夠不是正當的Base64文本,須要捕捉解析時異常

其實RSACryptoServiceProvider也供給懂得密的辦法,如許便可以驗證更多品種的驗證碼了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved