All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
小结SQL,Server连接失败错误的解决_[SQL,Server教程]
php常用数据库备份类_[PHP教程]
SQL Server 索引基础知识(3)----测试中一些常看的指标和清除缓存的方法_[SQL Server教程]
asp.net2.0验证控件之验证控件典型应用实例
Asp.Net,网站项目打包_[Asp.Net教程]
冷静对待流行技术风潮:忽悠一下Ajax_JavaScript技术_编程技术
33条C#、.Net经典面试题目及答案_[Asp.Net教程]
网页技巧:通过web.config设置数据库连接串_.net资料_编程技术
DataList的分页技术_[Asp.Net教程]
解决Ajax中文乱码问题_[AJAX教程]
Reading number is top 10 pictures
这年头,找个靠谱的妹子太难了
Startling Russian girl blind date scene2
这张图有两句话,你看出来了吗?
小学生作文又现神作,你不得不佩服
The money of more than 100 countries and regions19
So beauty, will let you spray blood9
湖边的风景
A man's favorite things10
徐若瑄展示美丽胸围1
China telecom 114 spokesman MeiYanXu2
Download software ranking
Ashlynn Video2
功夫熊猫2(下集)
apache-tomcat-6.0.33
Tram sex maniac 2 (H) rar bag5
Unix video tutorial9
Unix video tutorial10
White deer villiage
Boxer Classic video1
尖东毒玫瑰A
linux高级编程
aaa published in(发表于) 2013/12/13 9:42:16 Edit(编辑)
使用.NET自带的功能制作简单的注册码_.net资料_编程技术

使用.NET自带的功能制作简单的注册码_.net资料_编程技术

使用.NET自带的功能制作简单的注册码_.net资料_编程技术-你的首页-uuhomepage.com

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


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


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


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


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


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


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技术进行在线激活或注册,还是可以通过网络侦听来分析服务器的信息,模拟一个假的服务器来进行的。






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.