分享
 
 
 

使用.NET自带的功能制作简单的注册码

王朝c#·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

加密可以帮助保护数据不被查看和修改,并且可以帮助在本不安全的信道上提供安全的通信方式。例如,可以使用加密算法对数据进行加密,在加密状态下传输数据,然后由预定的接收方对数据进行解密。如果第三方截获了加密的数据,解密数据是很困难的。

为了达到这些目的,您可以使用算法和惯例的组合(称作加密基元)来创建加密方案。包括私钥加密(对称加密)、公钥加密(不对称加密)、加密签名和加密哈希。

我们使用公钥加密(不对称加密)来实现注册码的算法。

公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。

对于注册码来说,我们使用私钥来对一个字符串(用户名)签名,然后使用公钥对这个签名(注册码)进行验证。由于公钥只能用于验证,所以我们可以放心把公钥分发出去;私钥匙用来进行签名的,所以私钥匙要保存在开发者手中的。这样就达到了注册认证的目的。目前使用“用户名、注册码”模式注册的软件都应该是使用这一技术。

首先我们生成自己要使用的一个公钥和私钥。

Private rsa As New Security.Cryptography.RSACryptoServiceProvider

RSACryptoServiceProvider类提供RSA算法的实现执行不对称加密和解密。通过ToXMLString就可以生成我们需要的公钥和私钥。

rsa.ToXmlString(False)

rsa.ToXmlString(True)

当参数为False的时候,仅生成公钥;True的时候将会把公钥和私钥全部生成。我们一般通过ToXmlString(False)得到一个公钥字符串;通过ToXmlString(True)得到一个私钥字符串(虽然其中含有公钥)。我们可以将这两个密钥保存在本机上面,通过字符串常量定义并使用。也就是说我们的注册信息将使用唯一的公钥和私钥。

然后我们通过公钥和私钥对指定的字符串进行签名。

rsa.FromXmlString(PRIVATE_KEY)

Dim f As New Security.Cryptography.RSAPKCS1SignatureFormatter(rsa)

f.SetHashAlgorithm("SHA1")

Dim source() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)

Dim sha As New Security.Cryptography.SHA1Managed

Dim result() As Byte = sha.ComputeHash(source)

Dim regkey() As Byte = f.CreateSignature(result)

SerialNumber = Convert.ToBase64String(regkey)

通过刚才得到的私钥重新初始化rsa对象,然后通过RSAPKCS1SignatureFormatter类来进行签名。我们将输入的字符串转化成字节数组(我们这里默认用户名只能由ASCII字符组成),通过SHA1哈西算法计算其哈希值。再使用CreateSignature方法将得到的哈西值进行签名。最后我们将得到的字节数组转化成字符串作为注册码。这就是生成注册码的过程。我们可以重复使用这一段程序对不同的用户名进行签名,从而得到与之对应的不同注册码。

最后我们把刚才得到的用户名和注册码进行验证。

rsa.FromXmlString(PUBLIC_KEY)

Dim f As New Security.Cryptography.RSAPKCS1SignatureDeformatter(rsa)

f.SetHashAlgorithm("SHA1")

Dim key() As Byte = Convert.FromBase64String(SerialNumber)

Dim sha As New Security.Cryptography.SHA1Managed

Dim name() As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))

Result = f.VerifySignature(name, key)

这一次我们使用公钥来初始化rsa对象,然后通过RSAPKCS1SignatureDeformatter类来验证签名。我们将得到的注册码反向转化为字节数组;并将用户名进行哈西计算得到哈西值。最后通过VerifySignature进行验证。

从上面的程序可以看出,生成注册码需要私钥(私钥内附带公钥信息),而且可以生成任意多的用户名、注册码对。而通过公钥,我们只能进行验证而不能生成。所以公钥可以放心的发放给所有的用户进行验证,而私钥却不能。所以在发行的版本中可以附带公钥和验证算法。因为即便用户得到了公钥和验证算法也无法简单的破解。

现在网络上流行的注册机,很大程度上是破解了软件的私钥,从而达到无限制的生成所需要的注册信息。但是如果用户反编译你的产品,并且修改了中间代码,那么它将会绕过注册的判断逻辑。这就不是这一篇所能解决的问题了。因为即是你使用了Web Service技术进行在线激活或注册,还是可以通过网络侦听来分析服务器的信息,模拟一个假的服务器来进行的。

http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有