你的位置:首页 > 软件开发 > ASP.net > [C#]简单离线注册码生成与验证

[C#]简单离线注册码生成与验证

发布时间:2015-09-27 12:00:14
本文使用RSA非对称加密和Base64简单地实现离线注册码的生成与验证功能。主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机。客户机解Base64后,通过持有的公钥来验证注册码是否与本机标识或时间标识相符。 ...

本文使用RSA非对称加密和Base64简单地实现离线注册码的生成与验证功能。

主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机。

一、生成公密钥

RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider();File.WriteAllText("PrivateKey.", cryptor.Totrue));File.WriteAllText("PublicKey.", cryptor.Tofalse));

二、生成注册码

 1 static get='_blank'>string CreateRegCode(string mac, DateTime date) 2 { 3   RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider(); 4   cryptor.From"PrivateKey.")); 5   string signature = String.Format("[{0}][{1}]", mac, date.ToString("yyyy-MM-dd")); 6   byte[] regCodeBytes = cryptor.SignData( 7     Encoding.UTF8.GetBytes(signature), 8     "SHA1"); 9   return Convert.ToBase64String(regCodeBytes);10 }

三、验证注册码

 1 static bool Verify(string regCode) 2 { 3   const string PUBLIC_KEY = ""; 4   try 5   { 6     RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider(); 7     cryptor.From 8     byte[] signedData = Convert.FromBase64String(regCode); 9 10     bool today = cryptor.VerifyData(11       Encoding.UTF8.GetBytes(String.Format("[{0}][{0}]", DateTime.Now.ToString("yyyy-MM-dd"))),12       "SHA1", signedData);13     bool machineToday = cryptor.VerifyData(14       Encoding.UTF8.GetBytes(String.Format("[{0}][{1}]", MAC, DateTime.Now.ToString("yyyy-MM-dd"))),15       "SHA1", signedData);16     bool forever = cryptor.VerifyData(17       Encoding.UTF8.GetBytes(String.Format("[{0}][{1}]", MAC, Environment.MachineName)),18       "SHA1", signedData);19     return today || machineToday || forever;20   }21   catch22   {23     return false;24   }25 }

原标题:[C#]简单离线注册码生成与验证

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录