最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年09月28日 15:01:58   投稿:mrr  
本文使用RSA非對稱加密和Base64簡單地實現(xiàn)離線注冊碼的生成與驗證功能。感興趣的朋友跟著小編一起學(xué)習(xí)吧

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

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

一、 生成公密鑰

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

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

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

二、 生成注冊碼

 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是客戶機(jī)的地址2.第四行的文件是上一步生成的密鑰文件

3.由于只考慮驗證,所以客戶機(jī)還必須知道參數(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;
   }
 }

這個方法驗證了三種類型的注冊碼:當(dāng)天可用、本機(jī)當(dāng)天可用和永久可用。

需要注意:

1.第三行的公鑰就是第一步的PublicKey.xml中的內(nèi)容

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

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

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

相關(guān)文章

  • c# 對cookies(增、刪、改、查)的操作方法

    c# 對cookies(增、刪、改、查)的操作方法

    以前覺得cookies操作無非就那么幾種,但是“杯具事件”還是很多的,下面分享一下對cookies的簡單操作
    2013-04-04
  • 深入解析c#中枚舉類型的定義與使用

    深入解析c#中枚舉類型的定義與使用

    以下是對c#中枚舉類型的定義與使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C#特性(Attribute)

    C#特性(Attribute)

    這篇文章介紹了C#的特性(Attribute),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#設(shè)計模式之工廠模式

    C#設(shè)計模式之工廠模式

    本文詳細(xì)講解了C#設(shè)計模式之工廠模式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#利用反射技術(shù)實現(xiàn)去掉按鈕選中時的邊框效果

    C#利用反射技術(shù)實現(xiàn)去掉按鈕選中時的邊框效果

    這篇文章主要介紹了C#利用反射技術(shù)實現(xiàn)去掉按鈕選中時的邊框效果,涉及C#針對窗口的參數(shù)設(shè)置技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 基于C#實現(xiàn)語音合成播報器

    基于C#實現(xiàn)語音合成播報器

    這篇文章主要為大家詳細(xì)介紹了一個基于System.Speech的語音交互方案,可以在windows上實現(xiàn)語音播報指定文本,感興趣的小伙伴可以參考一下
    2025-03-03
  • C# XmlDocument操作XML案例詳解

    C# XmlDocument操作XML案例詳解

    這篇文章主要介紹了C# XmlDocument操作XML案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#基于HttpWebRequest實現(xiàn)發(fā)送HTTP請求的方法分析

    C#基于HttpWebRequest實現(xiàn)發(fā)送HTTP請求的方法分析

    這篇文章主要介紹了C#基于HttpWebRequest實現(xiàn)發(fā)送HTTP請求的方法,結(jié)合實例形式分析了C#使用HttpWebRequest類與System.IO類實現(xiàn)發(fā)送HTTP請求相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-02-02
  • C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法

    C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法

    這篇文章主要介紹了C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法,涉及C#數(shù)學(xué)運算的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • C#獲取指定年份第一個星期一具體日期的方法

    C#獲取指定年份第一個星期一具體日期的方法

    這篇文章主要介紹了C#獲取指定年份第一個星期一具體日期的方法,涉及C#日期與字符串操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04

最新評論

临泉县| 新疆| 南漳县| 焦作市| 武乡县| 横山县| 皮山县| 连江县| 京山县| 磴口县| 镶黄旗| 清流县| 临夏市| 十堰市| 巨野县| 六盘水市| 白城市| 万安县| 屏东县| 西盟| 嘉鱼县| 四会市| 博客| 土默特右旗| 阿坝| 滨州市| 香格里拉县| 苏尼特左旗| 穆棱市| 衢州市| 普宁市| 孟州市| 麦盖提县| 鸡泽县| 綦江县| 济宁市| 隆安县| 阿拉善盟| 梅河口市| 自治县| 尼木县|