本文使用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#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。