欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

基于C#實現(xiàn)簡單離線注冊碼生成與驗證

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

主要思路就是提供者持有密鑰,通過RSA加密客戶機標識或時間標識,再通過Base64加密成不太難看的注冊碼,然后分發(fā)給客戶機。

客戶機解Base64后,通過持有的公鑰來驗證注冊碼是否與本機標識或時間標識相符。

一、 生成公密鑰

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

為了方便長期保存這里就直接存入文件了。

為了避免客戶機公鑰丟失,我比較傾向于將公鑰直接編譯到驗證程序中,但是這樣也就意味著如果更換了密鑰,老的驗證程序就驗不了新生成的注冊碼了。

二、 生成注冊碼

 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.參數(shù)中的MAC是客戶機的地址2.第四行的文件是上一步生成的密鑰文件

3.由于只考慮驗證,所以客戶機還必須知道參數(shù)中的date

三、 驗證注冊碼

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中的內(nèi)容

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

3.考慮到客戶機填寫的注冊碼有可能不是合法的Base64文本,需要捕獲解析時異常

其實RSACryptoServiceProvider也提供了解密的方法,這樣就可以驗證更多種類的驗證碼了。

上一篇:C#中實現(xiàn)一次執(zhí)行多條帶GO的sql語句實例

欄    目:C#教程

下一篇:C#調(diào)用WebService實例開發(fā)

本文標題:基于C#實現(xiàn)簡單離線注冊碼生成與驗證

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6941.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有