• ASP.NET RSA 加密


    相信RSA加密大家都不陌生,MD5加密虽然也是一种加密手段,但是MD5加密是单向加密,不可以解密,在某些场合下显得非常不方便,所以今天特地MSDN上找了个例子来认识RSA加密

    1.首先是前端代码

       1:     <table style="font-family: Calibri;  100%">
       2:              <tr>
       3:                  <td>
       4:                      <asp:Label ID="lbwords" runat="server" Text="Enter Some Words:"></asp:Label>
       5:                  </td>
       6:                  <td colspan="3">
       7:                      <asp:TextBox ID="tbData" runat="server" Width="300px"></asp:TextBox>
       8:                  </td>
       9:              </tr>
      10:              <tr>
      11:                  <td>
      12:                      <asp:Label ID="lbEncryptData" runat="server" Text="Encrypted Data:"></asp:Label>
      13:                  </td>
      14:                  <td>
      15:                      <asp:Button ID="btnEncrypt" runat="server" Text="Encrypt it" OnClick="Encrypt_Click"
      16:                          Height="30px" Width="90px" />
      17:                      <br />
      18:                      <asp:TextBox ID="tbEncryptData" runat="server" TextMode="MultiLine" Height="200px"
      19:                          Width="400px" ReadOnly="true"></asp:TextBox>
      20:                      <br />
      21:                  </td>
      22:                  <td>
      23:                      <asp:Label ID="lbDecryptedData" runat="server" Text="Decrypted Data:"></asp:Label>
      24:                  </td>
      25:                  <td>
      26:                      <asp:Button ID="btnDecrypt" runat="server" Text="Decrypt it" OnClick="Decrypt_Click"
      27:                          Height="30px" Width="90px" />
      28:                      <br />
      29:                      <asp:TextBox ID="tbDecryptData" runat="server" TextMode="MultiLine" Height="200px"
      30:                          Width="400px" ReadOnly="true"></asp:TextBox>
      31:                      <br />
      32:                  </td>
      33:              </tr>
      34:          </table>

    2.后台代码

    说明:因为是初次接触RSA加密再加上C#基础不是很好,看起来还是非常费劲,所以加了许多注释。可以单独把加密和解写到一个类里面,到时候方便调用,但是如果是想用来加密密码或是用户名之类的,那应该在设计时留足足够的长度。

       1:   protected void Page_Load(object sender, EventArgs e)
       2:          {
       3:              AddKeyUpEventOnTextControl();
       4:              //1.PreRender 在加载 System.Web.UI.Control 对象之后、呈现之前发生。
       5:              //2.将 btn.Decrypt控件的PreRender事件绑定到名为btnDecrypt_PreRender 的方法(动态绑定)
       6:              this.btnDecrypt.PreRender += new EventHandler(btnDecrypt_PreRender);
       7:              this.btnEncrypt.PreRender += new EventHandler(btnEncrypt_PreRender);
       8:          }
       9:   
      10:          private void RSAEncryption()
      11:          {
      12:   
      13:              //3.CspParameters包含传递给执行加密计算的加密服务提供程序 (CSP) 的参数。无法继承此类。
      14:              CspParameters param = new CspParameters();
      15:              //4. KeyContainerName 表示 System.Security.Cryptography.CspParameters 的密钥容器名称。
      16:              param.KeyContainerName = "MyKeyContainer";
      17:              //5.  使用加密服务提供程序 (CSP) 提供的 System.Security.Cryptography.RSA 算法的实现执行不对称加密和解密
      18:              using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
      19:              {
      20:                  string plaintext = this.tbData.Text;
      21:                  byte[] plaindata = System.Text.Encoding.Default.GetBytes(plaintext);
      22:              //6. 如果为 true,则使用 OAEP 填充(仅在运行 Microsoft Windows XP 或更高版本的计算机上可用)执行直接的
      23:              //System.Security.Cryptography.RSA 加密;否则,如果为 false,则使用 PKCS#1 1.5 版填充。
      24:                  byte[] encryptdata = rsa.Encrypt(plaindata, false);
      25:              // 7.将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式
      26:                  string encryptstring = Convert.ToBase64String(encryptdata);//加密后长度为128
      27:                  this.tbEncryptData.Text = encryptstring;
      28:              }
      29:          }
      30:   
      31:          private void RSADecryption()
      32:          {
      33:              CspParameters param = new CspParameters();
      34:              param.KeyContainerName = "MyKeyContainer";
      35:              using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
      36:              {
      37:                  //8.将指定的字符串(它将二进制数据编码为 Base64 数字)转换为等效的 8 位无符号整数数组
      38:                  byte[] encryptdata = Convert.FromBase64String(this.tbEncryptData.Text);
      39:                  //9.使用 System.Security.Cryptography.RSA 算法对数据进行解密。
      40:                  byte[] decryptdata = rsa.Decrypt(encryptdata, false);
      41:                  string plaindata = System.Text.Encoding.Default.GetString(decryptdata);
      42:                  this.tbDecryptData.Text = plaindata;
      43:              }
      44:          }
      45:   
      46:          protected void Encrypt_Click(object sender, EventArgs e)
      47:          {
      48:              RSAEncryption();
      49:          }
      50:   
      51:          protected void Decrypt_Click(object sender, EventArgs e)
      52:          {
      53:              RSADecryption();
      54:          }
      55:   
      56:          void btnDecrypt_PreRender(object sender, EventArgs e)
      57:          {
      58:              EnableDecryptButton();
      59:          }
      60:   
      61:          void btnEncrypt_PreRender(object sender, EventArgs e)
      62:          {
      63:              EnableEncryptButton();
      64:          }
      65:   
      66:          private void AddKeyUpEventOnTextControl()
      67:          {
      68:              string script = string.Format(@"function PressFn(sender) {{
      69:                                              document.getElementById('{0}').disabled = sender.value == '' ? true : false;
      70:                                              }}", btnEncrypt.ClientID);
      71:              tbData.Attributes["onkeyup"] = "PressFn(this)";
      72:              Page.ClientScript.RegisterStartupScript(this.GetType(), "DataKeyUp", script, true);
      73:          }
      74:   
      75:          /// <summary>
      76:          /// 动态设置加密按钮是否可用
      77:          /// </summary>
      78:          private void EnableDecryptButton()
      79:          {
      80:              btnDecrypt.Enabled = this.tbEncryptData.Text != string.Empty ? true : false;
      81:             //大概以前都不会想到用这种想法,如果是我我会用if...else...
      82:          }
      83:   
      84:          /// <summary>
      85:          /// 动态设置解密按钮是否可用
      86:          /// </summary>
      87:          private void EnableEncryptButton()
      88:          {
      89:              btnEncrypt.Enabled = this.tbData.Text != string.Empty ? true : false;
      90:          }
  • 相关阅读:
    《Cracking the Coding Interview》——第2章:链表——题目5
    《Cracking the Coding Interview》——第2章:链表——题目4
    《Cracking the Coding Interview》——第2章:链表——题目3
    《Cracking the Coding Interview》——第2章:链表——题目2
    《Cracking the Coding Interview》——第2章:链表——题目1
    《Cracking the Coding Interview》——第1章:数组和字符串——题目8
    《Cracking the Coding Interview》——第1章:数组和字符串——题目7
    extern 用法,全局变量与头文件(重复定义)
    关于#ifdef #ifndef
    C语言中extern的用法
  • 原文地址:https://www.cnblogs.com/January/p/2260849.html
Copyright © 2020-2023  润新知