本文實例講述了C#實現(xiàn)簡單的RSA非對稱加密算法。分享給大家供大家參考,具體如下:
界面控件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
namespace RSA算法 { partial class Form1 { /// <summary> /// 必需的設(shè)計器變量。 /// </summary> private System.ComponentModel.IContainer components = null ; /// <summary> /// 清理所有正在使用的資源。 /// </summary> /// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param> protected override void Dispose( bool disposing) { if (disposing && (components != null )) { components.Dispose(); } base .Dispose(disposing); } #region Windows 窗體設(shè)計器生成的代碼 /// <summary> /// 設(shè)計器支持所需的方法 - 不要 /// 使用代碼編輯器修改此方法的內(nèi)容。 /// </summary> private void InitializeComponent() { this .StrBox = new System.Windows.Forms.TextBox(); this .label1 = new System.Windows.Forms.Label(); this .PubKeyBox = new System.Windows.Forms.TextBox(); this .label2 = new System.Windows.Forms.Label(); this .PrvKeyBox = new System.Windows.Forms.TextBox(); this .label3 = new System.Windows.Forms.Label(); this .EncrypeBox = new System.Windows.Forms.TextBox(); this .label4 = new System.Windows.Forms.Label(); this .label5 = new System.Windows.Forms.Label(); this .Str2Box = new System.Windows.Forms.TextBox(); this .CrypeBtn = new System.Windows.Forms.Button(); this .SuspendLayout(); // // StrBox // this .StrBox.Location = new System.Drawing.Point(115, 12); this .StrBox.Name = "StrBox" ; this .StrBox.Size = new System.Drawing.Size(258, 21); this .StrBox.TabIndex = 0; // // label1 // this .label1.AutoSize = true ; this .label1.Location = new System.Drawing.Point(11, 18); this .label1.Name = "label1" ; this .label1.Size = new System.Drawing.Size(77, 12); this .label1.TabIndex = 1; this .label1.Text = "加密前的明文" ; // // PubKeyBox // this .PubKeyBox.Location = new System.Drawing.Point(115, 78); this .PubKeyBox.Multiline = true ; this .PubKeyBox.Name = "PubKeyBox" ; this .PubKeyBox.Size = new System.Drawing.Size(258, 74); this .PubKeyBox.TabIndex = 2; // // label2 // this .label2.AutoSize = true ; this .label2.Location = new System.Drawing.Point(11, 87); this .label2.Name = "label2" ; this .label2.Size = new System.Drawing.Size(29, 12); this .label2.TabIndex = 3; this .label2.Text = "公鑰" ; // // PrvKeyBox // this .PrvKeyBox.Location = new System.Drawing.Point(115, 158); this .PrvKeyBox.Multiline = true ; this .PrvKeyBox.Name = "PrvKeyBox" ; this .PrvKeyBox.Size = new System.Drawing.Size(258, 128); this .PrvKeyBox.TabIndex = 4; // // label3 // this .label3.AutoSize = true ; this .label3.Location = new System.Drawing.Point(13, 167); this .label3.Name = "label3" ; this .label3.Size = new System.Drawing.Size(101, 12); this .label3.TabIndex = 5; this .label3.Text = "密鑰(包含私鑰)" ; // // EncrypeBox // this .EncrypeBox.Location = new System.Drawing.Point(115, 292); this .EncrypeBox.Name = "EncrypeBox" ; this .EncrypeBox.Size = new System.Drawing.Size(258, 21); this .EncrypeBox.TabIndex = 6; // // label4 // this .label4.AutoSize = true ; this .label4.Location = new System.Drawing.Point(14, 299); this .label4.Name = "label4" ; this .label4.Size = new System.Drawing.Size(29, 12); this .label4.TabIndex = 7; this .label4.Text = "密文" ; // // label5 // this .label5.AutoSize = true ; this .label5.Location = new System.Drawing.Point(14, 329); this .label5.Name = "label5" ; this .label5.Size = new System.Drawing.Size(77, 12); this .label5.TabIndex = 8; this .label5.Text = "解密后的明文" ; // // Str2Box // this .Str2Box.Location = new System.Drawing.Point(115, 320); this .Str2Box.Name = "Str2Box" ; this .Str2Box.Size = new System.Drawing.Size(258, 21); this .Str2Box.TabIndex = 9; // // CrypeBtn // this .CrypeBtn.Location = new System.Drawing.Point(117, 43); this .CrypeBtn.Name = "CrypeBtn" ; this .CrypeBtn.Size = new System.Drawing.Size(104, 23); this .CrypeBtn.TabIndex = 10; this .CrypeBtn.Text = "執(zhí)行加密解密" ; this .CrypeBtn.UseVisualStyleBackColor = true ; this .CrypeBtn.Click += new System.EventHandler( this .CrypeBtn_Click); // // Form1 // this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this .ClientSize = new System.Drawing.Size(385, 353); this .Controls.Add( this .CrypeBtn); this .Controls.Add( this .Str2Box); this .Controls.Add( this .label5); this .Controls.Add( this .label4); this .Controls.Add( this .EncrypeBox); this .Controls.Add( this .label3); this .Controls.Add( this .PrvKeyBox); this .Controls.Add( this .label2); this .Controls.Add( this .PubKeyBox); this .Controls.Add( this .label1); this .Controls.Add( this .StrBox); this .Name = "Form1" ; this .Text = "RSA非對稱加密解密" ; this .ResumeLayout( false ); this .PerformLayout(); } #endregion private System.Windows.Forms.TextBox StrBox; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox PubKeyBox; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox PrvKeyBox; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox EncrypeBox; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox Str2Box; private System.Windows.Forms.Button CrypeBtn; } } |
RSA代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; namespace RSA算法 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void CrypeBtn_Click( object sender, EventArgs e) { //創(chuàng)建RSA加密算法服務(wù)提供者 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //顯示公鑰和私鑰 PubKeyBox.Text = RSA.ToXmlString( false ); PrvKeyBox.Text = RSA.ToXmlString( true ); //執(zhí)行加密 byte [] EncrypeBytes = RSA.Encrypt(Encoding.UTF8.GetBytes(StrBox.Text), true ); EncrypeBox.Text = Encoding.UTF8.GetString(EncrypeBytes); //執(zhí)行解密 byte [] DecrypeBytes = RSA.Decrypt(EncrypeBytes, true ); Str2Box.Text = Encoding.UTF8.GetString(DecrypeBytes); } } } |
運行效果:
希望本文所述對大家C#程序設(shè)計有所幫助。
原文鏈接:http://blog.csdn.net/microzone/article/details/16904685