实践过程
效果
代码
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
|
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load( object sender, EventArgs e) { FileMenu(Application.ExecutablePath + ",0" , Application.ExecutablePath); string [] str = Environment.GetCommandLineArgs(); try { string strFile = "" ; for ( int i = 2; i < str.Length; i++) strFile += str[i]; FileInfo FInfo = new FileInfo(strFile); if (FInfo.Extension.ToLower() == ".mrrar" ) textBox1.Text = strFile; } catch { } } //选择要加密或解密的文件 private void button1_Click( object sender, EventArgs e) { openFileDialog1.Filter = "*.rar(rar压缩文件)|*.rar|*.mrrar(mrrar加密文件)|*.mrrar|*.*(所有文件)|*.*" ; if (openFileDialog1.ShowDialog() == DialogResult.OK) textBox1.Text = openFileDialog1.FileName; } //加密rar文件 private void button2_Click( object sender, EventArgs e) { string strPwd = textBox2.Text; byte [] btRKey = new byte [0]; if (strPwd.Length == 6) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[0], ( byte )strPwd[1] }; } if (strPwd.Length == 7) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[6], ( byte )strPwd[0] }; } if (strPwd.Length >= 8) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[6], ( byte )strPwd[7] }; } FileStream FStream = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read); FileStream NewFStream = new FileStream(textBox1.Text + ".mrrar" , FileMode.OpenOrCreate, FileAccess.Write); NewFStream.SetLength(( long )0); byte [] buffer = new byte [0x400]; int MinNum = 0; long length = FStream.Length; int MaxNum = ( int )(length / (( long )0x400)); DES myDES = new DESCryptoServiceProvider(); CryptoStream CStream = new CryptoStream(NewFStream, myDES.CreateEncryptor(btRKey, btRKey), CryptoStreamMode.Write); while (MinNum < length) { int count = FStream.Read(buffer, 0, 0x400); CStream.Write(buffer, 0, count); MinNum += count; } CStream.Close(); NewFStream.Close(); FStream.Close(); File.Delete(textBox1.Text); MessageBox.Show( "使用口令加密rar文件成功!" , "信息提示" , MessageBoxButtons.OK, MessageBoxIcon.Information); } //解密rar文件 private void button3_Click( object sender, EventArgs e) { string strPwd = textBox2.Text; FileStream FStream = null ; FileStream NewFStream = null ; CryptoStream CStream = null ; try { try { byte [] btRKey = new byte [0]; if (strPwd.Length == 6) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[0], ( byte )strPwd[1] }; } if (strPwd.Length == 7) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[6], ( byte )strPwd[0] }; } if (strPwd.Length >= 8) { btRKey = new byte [] { ( byte )strPwd[0], ( byte )strPwd[1], ( byte )strPwd[2], ( byte )strPwd[3], ( byte )strPwd[4], ( byte )strPwd[5], ( byte )strPwd[6], ( byte )strPwd[7] }; } FStream = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read); string strNewFile = textBox1.Text.Substring(0, textBox1.Text.Length - 6); NewFStream = new FileStream(strNewFile, FileMode.OpenOrCreate, FileAccess.Write); NewFStream.SetLength(( long )0); byte [] buffer = new byte [0x400]; int MinNum = 0; long length = FStream.Length; int MaxNum = ( int )(length / (( long )0x400)); DES myDES = new DESCryptoServiceProvider(); CStream = new CryptoStream(NewFStream, myDES.CreateDecryptor(btRKey, btRKey), CryptoStreamMode.Write); while (MinNum < length) { int count = FStream.Read(buffer, 0, 0x400); CStream.Write(buffer, 0, count); MinNum += count; } CStream.Close(); FStream.Close(); NewFStream.Close(); File.Delete(textBox1.Text); System.Diagnostics.Process.Start(strNewFile); } catch { MessageBox.Show( "口令错误!" , "信息提示" , MessageBoxButtons.OK, MessageBoxIcon.Error); textBox2.Focus(); } } finally { CStream.Close(); FStream.Close(); NewFStream.Close(); } } //创建快捷菜单 public static void FileMenu( string strPath, string strName) { try { Registry.ClassesRoot.CreateSubKey( ".mrrar" ); RegistryKey RKey1 = Registry.ClassesRoot.OpenSubKey( ".mrrar" , true ); RKey1.SetValue( "" , "mrrarfile" ); RKey1.Close(); Registry.ClassesRoot.CreateSubKey( "mrrarfile" ); RegistryKey RKey2 = Registry.ClassesRoot.OpenSubKey( "mrrarfile" , true ); RKey2.CreateSubKey( "DefaultIcon" ); RKey2.CreateSubKey( "shell" ); RKey2.Close(); RegistryKey RKey3 = Registry.ClassesRoot.OpenSubKey( "mrrarfile\\DefaultIcon" , true ); RKey3.SetValue( "" , strPath); RKey3.Close(); RegistryKey RKey4 = Registry.ClassesRoot.OpenSubKey( "mrrarfile\\shell" , true ); RKey4.CreateSubKey( "使用口令打开" ); RKey4.Close(); RegistryKey RKey5 = Registry.ClassesRoot.OpenSubKey( "mrrarfile\\shell\\使用口令打开" , true ); RKey5.CreateSubKey( "command" ); RKey5.Close(); RegistryKey RKey6 = Registry.ClassesRoot.OpenSubKey( "mrrarfile\\shell\\使用口令打开\\command" , true ); RKey6.SetValue( "" , strName + " \\F %1" ); RKey6.Close(); } catch { } } } |
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
|
partial class Form1 { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null ; /// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose( bool disposing) { if (disposing && (components != null )) { components.Dispose(); } base .Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this .button3 = new System.Windows.Forms.Button(); this .button2 = new System.Windows.Forms.Button(); this .groupBox1 = new System.Windows.Forms.GroupBox(); this .label1 = new System.Windows.Forms.Label(); this .textBox1 = new System.Windows.Forms.TextBox(); this .button1 = new System.Windows.Forms.Button(); this .label3 = new System.Windows.Forms.Label(); this .label2 = new System.Windows.Forms.Label(); this .textBox2 = new System.Windows.Forms.TextBox(); this .openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this .groupBox1.SuspendLayout(); this .SuspendLayout(); // // button3 // this .button3.Location = new System.Drawing.Point(250, 107); this .button3.Name = "button3" ; this .button3.Size = new System.Drawing.Size(59, 27); this .button3.TabIndex = 11; this .button3.Text = "打开" ; this .button3.UseVisualStyleBackColor = true ; this .button3.Click += new System.EventHandler( this .button3_Click); // // button2 // this .button2.Location = new System.Drawing.Point(185, 107); this .button2.Name = "button2" ; this .button2.Size = new System.Drawing.Size(59, 27); this .button2.TabIndex = 12; this .button2.Text = "加密" ; this .button2.UseVisualStyleBackColor = true ; this .button2.Click += new System.EventHandler( this .button2_Click); // // groupBox1 // this .groupBox1.Controls.Add( this .label1); this .groupBox1.Controls.Add( this .textBox1); this .groupBox1.Controls.Add( this .button1); this .groupBox1.Controls.Add( this .label3); this .groupBox1.Controls.Add( this .label2); this .groupBox1.Controls.Add( this .textBox2); this .groupBox1.Location = new System.Drawing.Point(5, 9); this .groupBox1.Name = "groupBox1" ; this .groupBox1.Size = new System.Drawing.Size(304, 92); this .groupBox1.TabIndex = 10; this .groupBox1.TabStop = false ; this .groupBox1.Text = "rar文件加/解密设置" ; // // label1 // this .label1.AutoSize = true ; this .label1.Location = new System.Drawing.Point(6, 17); this .label1.Name = "label1" ; this .label1.Size = new System.Drawing.Size(95, 12); this .label1.TabIndex = 0; this .label1.Text = "请选择rar文件:" ; // // textBox1 // this .textBox1.Location = new System.Drawing.Point(32, 35); this .textBox1.Name = "textBox1" ; this .textBox1.Size = new System.Drawing.Size(225, 21); this .textBox1.TabIndex = 1; // // button1 // this .button1.Location = new System.Drawing.Point(263, 33); this .button1.Name = "button1" ; this .button1.Size = new System.Drawing.Size(33, 23); this .button1.TabIndex = 2; this .button1.Text = "…" ; this .button1.UseVisualStyleBackColor = true ; this .button1.Click += new System.EventHandler( this .button1_Click); // // label3 // this .label3.AutoSize = true ; this .label3.ForeColor = System.Drawing.Color.Red; this .label3.Location = new System.Drawing.Point(201, 66); this .label3.Name = "label3" ; this .label3.Size = new System.Drawing.Size(95, 12); this .label3.TabIndex = 5; this .label3.Text = "(密码应大于6位)" ; // // label2 // this .label2.AutoSize = true ; this .label2.Location = new System.Drawing.Point(7, 66); this .label2.Name = "label2" ; this .label2.Size = new System.Drawing.Size(65, 12); this .label2.TabIndex = 3; this .label2.Text = "加密口令:" ; // // textBox2 // this .textBox2.Location = new System.Drawing.Point(73, 63); this .textBox2.Name = "textBox2" ; this .textBox2.PasswordChar = '*' ; this .textBox2.Size = new System.Drawing.Size(127, 21); this .textBox2.TabIndex = 4; // // openFileDialog1 // this .openFileDialog1.FileName = "openFileDialog1" ; // // Form1 // this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this .ClientSize = new System.Drawing.Size(316, 140); this .Controls.Add( this .button3); this .Controls.Add( this .button2); this .Controls.Add( this .groupBox1); this .MaximizeBox = false ; this .MinimizeBox = false ; this .Name = "Form1" ; this .StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this .Text = "用口令加密rar压缩文件" ; this .Load += new System.EventHandler( this .Form1_Load); this .groupBox1.ResumeLayout( false ); this .groupBox1.PerformLayout(); this .ResumeLayout( false ); } #endregion private System.Windows.Forms.Button button3; private System.Windows.Forms.Button button2; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.OpenFileDialog openFileDialog1; } |
到此这篇关于详解C#如何加密解密RAR文件的文章就介绍到这了,更多相关C#加密解密RAR文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_27489007/article/details/128436885