博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET RSA 加密
阅读量:6155 次
发布时间:2019-06-21

本文共 5275 字,大约阅读时间需要 17 分钟。

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

1.首先是前端代码

1:     
2:              
3:                  
4:                      
5:                  
6:                  
7:                      
8:                  
9:              
10:              
11:                  
12:                      
13:                  
14:                  
15:                      
16:                          Height="30px" Width="90px" />
17:                      
18:                      
19:                          Width="400px" ReadOnly="true">
20:                      
21:                  
22:                  
23:                      
24:                  
25:                  
26:                      
27:                          Height="30px" Width="90px" />
28:                      
29:                      
30:                          Width="400px" ReadOnly="true">
31:                      
32:                  
33:              
34:          

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:          /// 
76:          /// 动态设置加密按钮是否可用
77:          /// 
78:          private void EnableDecryptButton()
79:          {
80:              btnDecrypt.Enabled = this.tbEncryptData.Text != string.Empty ? true : false;
81:             //大概以前都不会想到用这种想法,如果是我我会用if...else...
82:          }
83:   
84:          /// 
85:          /// 动态设置解密按钮是否可用
86:          /// 
87:          private void EnableEncryptButton()
88:          {
89:              btnEncrypt.Enabled = this.tbData.Text != string.Empty ? true : false;
90:          }

转载于:https://www.cnblogs.com/January/archive/2011/11/23/2260849.html

你可能感兴趣的文章
教学思路C#之入门一 认识简单的C#结构
查看>>
自定义hive url parse函数
查看>>
.NET多线程编程(7)——C#多线程编程传递参数解决方案
查看>>
论“前置测试模型”-1 概念篇
查看>>
微软私有云分享(R2)16PowerShell查看虚拟机信息
查看>>
(运维)VMware-vCenter-Server-update Management
查看>>
.NET平台开发必须掌握的XML知识(二)
查看>>
闲谈“个人核心竞争力”与“危机感” !!!
查看>>
extmail垃圾邮件存放垃圾邮件箱
查看>>
Lync server 2013 监控角色的安装
查看>>
MySQL-MMM如何调用远程管理卡命令去fence?
查看>>
App-V5.0服务器部署
查看>>
使用RAC和Data Guard构建MAA架构
查看>>
存储安全与数据恢复基础手册-服务器篇
查看>>
[IE技巧] 让IE 以全屏模式启动
查看>>
【VMware虚拟化解决方案】双网隔离虚拟化桌面解决方案
查看>>
从瀑布模型、极限编程到敏捷开发
查看>>
EF4.1中诡异的GUID为空问题
查看>>
用开源NAC阻止非法网络访问
查看>>
svn 建子项目的方法
查看>>