ASP教程 PHP教程 JSP教程 CGI教程 XML教程
  • ASP.NET教程
  • JAVA教程
    当前位置:教程 > 程序设计 > ASP.NET教程 > 正文

    在ASP.NET应用程序中捕捉身份验证状态的变化

    编辑:教程网 来源:网络 时间:2011年11月06日 15:41
    加密可以帮助保护数据不被查看和修改,并且可以帮助在本不安全的信道上提供安全的通信方式。例如,可以使用加密算法对数据进行加密,在加密状态下传输数据,然后由预定的接收方对数据进行解密。如果第三方截获了加密的数据,解密数据是很困难的。

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

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

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

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

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

    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进行验证。
  • 原文来自 教程网 转载请注明:http://www.websmill.com/chengxu/aspnet/31581.html

  • 上一篇:学习PetShop3.0(1)用户登陆(SignIn.aspx)
  • 下一篇:学C#遇到的几个问题