.net 1.0 制作简单的注册码

使用.NET   1.1   制作简单的注册码(参考网上某人写的东西   原作者不知道是谁)
C#

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

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

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

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

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

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

RSA   objrsa11   =   new   RSACryptoServiceProvider();

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

objrsa11.ToXmlString(False)

objrsa11.ToXmlString(True)

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

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

RSA   objrsa   =   new   RSACryptoServiceProvider();
objrsa.FromXmlString( "     通过ToXmlString(True)得到一个私钥字符串(虽然其中含有公钥) ");
RSAPKCS1SignatureFormatter   objrsapkcssf   =   new   RSAPKCS1SignatureFormatter(objrsa);
objrsapkcssf.SetHashAlgorithm( "SHA1 ");
byte[]   unamebyte   =   ASCIIEncoding.ASCII.GetBytes( "cnsjd ");//使用私钥对cnsjd   字符串进行加密
SHA1   objsha1   =   new   SHA1CryptoServiceProvider();
byte[]   sha1byte   =   objsha1.ComputeHash(unamebyte);
byte[]   regkeybyte   =   objrsapkcssf.CreateSignature(sha1byte);
this.TextBox1.Text   =   Convert.ToBase64String(regkeybyte);//使用私钥对cnsjd字符串   加密好的字符串,,类似通常软件的注册码

objrsa.FromXmlString( " <RSAKeyValue> <Modulus> ... </Modulus> <Exponent> ... </Exponent> </RSAKeyValue> (前面算出的公私钥里的公钥部分) ");
RSAPKCS1SignatureDeformatter   df   =   new   RSAPKCS1SignatureDeformatter(objrsa);
df.SetHashAlgorithm( "SHA1 ");
if(df.VerifySignature(sha1byte,Convert.FromBase64String(Convert.ToBase64String(regkeybyte))))//使用公钥验证   私钥加密好的字符串
{
Response.Write( "签名验证通过! ");
}
else
{
Response.Write( "签名验证失败! ");
}
posted @ 2007-11-13 17:59  Nina  阅读(436)  评论(0编辑  收藏  举报