ASP.NET RSA暗号化

21567 ワード

RSA暗号化は皆さんもよく知られていると思います.MD 5暗号化も暗号化の手段ですが、MD 5暗号化は一方向暗号化であり、復号できません.場合によっては不便なので、今日はMSDNでRSA暗号化を認識する例を探しました.
1.まずフロントエンドコード
   1:     <table style="font-family: Calibri; width: 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>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
2.バックグラウンドコード
説明:初めてのRSA暗号化に加えてC#ベースがあまり良くないため、かなり苦労しているように見えますので、コメントをたくさんつけました.暗号化と解を1つのクラスに単独で書くことができ、呼び出すのに便利ですが、暗号化やユーザー名などに使用したい場合は、設計時に十分な長さを残す必要があります.
   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:          }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }