主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机。
客户机解Base64后,通过持有的公钥来验证注册码是否与本机标识或时间标识相符。
一、生成公密钥
RSACryptoServiceProvidercryptor=newRSACryptoServiceProvider();
File.WriteAllText(“PrivateKey.xml”,cryptor.ToXmlString(true));
File.WriteAllText(“PublicKey.xml”,cryptor.ToXmlString(false));
为了方便长期保存这里就直接存入文件了。
为了避免客户机公钥丢失,我比较倾向于将公钥直接编译到验证程序中,但是这样也就意味着如果更换了密钥,老的验证程序就验不了新生成的注册码了。
二、生成注册码
staticstringCreateRegCode(stringmac,DateTimedate) { RSACryptoServiceProvidercryptor=newRSACryptoServiceProvider(); cryptor.FromXmlString(File.ReadAllText("PrivateKey.xml")); stringsignature=String.Format("[{}][{}]",mac,date.ToString("yyyy-MM-dd")); byte[]regCodeBytes=cryptor.SignData( Encoding.UTF.GetBytes(signature), "SHA"); returnConvert.ToBaseString(regCodeBytes); }
这个方法是通过加密MAC和日期的组合来生成注册码,需要注意几点:
1.参数中的MAC是客户机的地址2.第四行的文件是上一步生成的密钥文件
3.由于只考虑验证,所以客户机还必须知道参数中的date
三、验证注册码
staticboolVerify(stringregCode) { conststringPUBLIC_KEY=""; try { RSACryptoServiceProvidercryptor=newRSACryptoServiceProvider(); cryptor.FromXmlString(PUBLIC_KEY); byte[]signedData=Convert.FromBaseString(regCode); booltoday=cryptor.VerifyData( Encoding.UTF.GetBytes(String.Format("[{}][{}]",DateTime.Now.ToString("yyyy-MM-dd"))), "SHA",signedData); boolmachineToday=cryptor.VerifyData( Encoding.UTF.GetBytes(String.Format("[{}][{}]",MAC,DateTime.Now.ToString("yyyy-MM-dd"))), "SHA",signedData); boolforever=cryptor.VerifyData( Encoding.UTF.GetBytes(String.Format("[{}][{}]",MAC,Environment.MachineName)), "SHA",signedData); returntoday||machineToday||forever; } catch { returnfalse; } }
这个方法验证了三种类型的注册码:当天可用、本机当天可用和永久可用。
需要注意:
1.第三行的公钥就是第一步的PublicKey.xml中的内容
2.十四和十七行的MAC是客户机的物理地址,至于怎么获取不是本文的重点,请各位看官自行百度
3.考虑到客户机填写的注册码有可能不是合法的Base64文本,需要捕获解析时异常
其实RSACryptoServiceProvider也提供了解密的方法,这样就可以验证更多种类的验证码了。
您可能感兴趣的文章:asp.net简易生成注册码(数字+大小写字母)C#生成注册码的实例代码EditPlus注册码生成器(js代码实现)C#实现生成mac地址与IP地址注册码的两种方法
c++实现跳跃表(Skip List)的方法示例
C语言中常用的几个头文件及库函数
上述就是C#学习教程:基于C#实现简单离线注册码生成与验证分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/906845.html