CNA文件加解密數(shù)據(jù)算法
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
.版本 2 .支持庫(kù) spec .支持庫(kù) iext .程序集 窗口程序集_啟動(dòng)窗口 .子程序 __啟動(dòng)窗口_創(chuàng)建完畢 .局部變量 code, 字節(jié)集, , , 加密密碼 .局部變量 test, 字節(jié)集, , , 要加密碼的數(shù)據(jù)字節(jié)集 .局部變量 i, 整數(shù)型, , , 查看反饋信息 ' 簡(jiǎn)單例子 test = 到字節(jié)集 (“aaaaaaa aaa.*#(中。329}@#¥”) code = 到字節(jié)集 (“中。有 3a#”) CNA數(shù)據(jù) (test, code, 1) 調(diào)試輸出 (到文本 (test)) CNA數(shù)據(jù) (test, code, ) 調(diào)試輸出 (到文本 (test)) ' 直接用一個(gè)文件進(jìn)行加解密測(cè)試。功能完整的。 .子程序 CNA數(shù)據(jù), 整數(shù)型, , 返回?cái)?shù)1表示加密完成,返回0表示解密完成,返回10表示加密或解密碼失敗 .參數(shù) 數(shù)據(jù)集, 字節(jié)集, 可空, 要加密的數(shù)據(jù)集 .參數(shù) 密碼集, 字節(jié)集, 可空, 要加密的密碼集 .參數(shù) 方式, 整數(shù)型, 可空, 1是加密,0或省略是解密 .局部變量 j, 整數(shù)型, , , 計(jì)次變量 .局部變量 i, 整數(shù)型, , , 密碼集長(zhǎng)度 .局部變量 k, 整數(shù)型, , , 數(shù)據(jù)集長(zhǎng)度 .局部變量 lk, 整數(shù)型, , , 計(jì)算對(duì)換對(duì)換位置變量 .局部變量 t, 整數(shù)型, , , 計(jì)算對(duì)換對(duì)換位置變量 .局部變量 對(duì)換位置組, 整數(shù)型, , "0", 存放8個(gè)位置數(shù)據(jù) .局部變量 臨時(shí)變量, 字節(jié)集, , , 臨時(shí)存放變量 .局部變量 密碼疊加量, 整數(shù)型, , , 密碼疊加變量 .局部變量 隨機(jī)數(shù), 整數(shù)型, , , 隨機(jī)變量 .局部變量 隨機(jī)變量集, 字節(jié)集, , , 隨機(jī)變量字節(jié)集 .局部變量 單個(gè)對(duì)換位置, 整數(shù)型, , , 存放單個(gè)對(duì)換位置 ' 限制只加密大于大于或等于10字節(jié)以上長(zhǎng)度的文件,密碼可以和文件一樣長(zhǎng),如果比文件長(zhǎng),那多出部分只能累加到密碼疊加量里,不能在數(shù)據(jù)集加密中進(jìn)行混合 ' 小于10字節(jié)的文件可自行調(diào)整參數(shù)和算法 .如果真 (方式 = 1 且 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) ≥ 10 且 取字節(jié)集長(zhǎng)度 (密碼集) ≥ 1) ' >>>>>>>>>>>>>加密開(kāi)始 ' ----------------------------------(1)計(jì)算密碼疊加量 j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (j, i) 密碼疊加量 = 密碼集 [i] + 密碼疊加量 + i × 15 .計(jì)次循環(huán)尾 () lk = 密碼疊加量 ' ---用于計(jì)算對(duì)換位置時(shí)使用 ' ----------------------------------(2)引入固定8位數(shù)隨機(jī)變量 置隨機(jī)數(shù)種子 () 隨機(jī)數(shù) = 取隨機(jī)數(shù) (10000000, 98999999) ' ----------------------------------(3)開(kāi)始數(shù)據(jù)集加密 j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集), i) ' ------開(kāi)始加密數(shù)據(jù) 數(shù)據(jù)集 [i] = 數(shù)據(jù)集 [i] + 密碼集 [j] + 密碼疊加量 + 隨機(jī)數(shù) j = j - 1 .如果真 (j = 0) j = 取字節(jié)集長(zhǎng)度 (密碼集) .如果真結(jié)束 .計(jì)次循環(huán)尾 () ' ----------------------------------(4)開(kāi)始把隨機(jī)數(shù)轉(zhuǎn)換隨機(jī)變量集加密,再合并到數(shù)據(jù)集中 隨機(jī)數(shù) = 隨機(jī)數(shù) + 密碼疊加量 ' ------第一次簡(jiǎn)單混合加密 隨機(jī)變量集 = 到字節(jié)集 (到文本 (隨機(jī)數(shù))) j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (取字節(jié)集長(zhǎng)度 (隨機(jī)變量集), i) ' ------開(kāi)始第二次加密隨機(jī)變量集 隨機(jī)變量集 [i] = 隨機(jī)變量集 [i] + 密碼集 [j] + 密碼疊加量 j = j - 1 .如果真 (j = 0) j = 取字節(jié)集長(zhǎng)度 (密碼集) .如果真結(jié)束 .計(jì)次循環(huán)尾 () 數(shù)據(jù)集 = 數(shù)據(jù)集 + 隨機(jī)變量集 ' ------數(shù)據(jù)集和隨機(jī)變量集合并 ' ----------------------------------(5)通過(guò)對(duì)數(shù)據(jù)集長(zhǎng)度和密碼疊加變量的比例算法求出對(duì)換位置 t = 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) .計(jì)次循環(huán)首 (8, i) ' ------先通過(guò)和密碼疊加變量計(jì)算出對(duì)應(yīng)位置 加入成員 (對(duì)換位置組, t × lk ÷ (lk + t)) t = t - 1.69 lk = lk × 0.459 .計(jì)次循環(huán)尾 () ' ----------------------------------(6)開(kāi)始對(duì)換隨機(jī)變量集在數(shù)據(jù)集里的位置 k = 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) 臨時(shí)變量 = 取空白字節(jié)集 (1) .計(jì)次循環(huán)首 (8, i) ' ------ 開(kāi)始對(duì)換 單個(gè)對(duì)換位置 = 對(duì)換位置組 [i] 臨時(shí)變量 [1] = 數(shù)據(jù)集 [單個(gè)對(duì)換位置] 數(shù)據(jù)集 [單個(gè)對(duì)換位置] = 數(shù)據(jù)集 [k] 數(shù)據(jù)集 [k] = 臨時(shí)變量 [1] k = k - 1 .計(jì)次循環(huán)尾 () 返回 (1) .如果真結(jié)束 .如果真 (方式 = 0 且 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) ≥ 10 且 取字節(jié)集長(zhǎng)度 (密碼集) ≥ 1) ' --------------------解密 ' ----------------------------------(1)計(jì)算密碼疊加量,和加密部分(1)一樣 j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (j, i) 密碼疊加量 = 密碼集 [i] + 密碼疊加量 + i × 15 .計(jì)次循環(huán)尾 () lk = 密碼疊加量 ' ---用于計(jì)算對(duì)換位置時(shí)使用 ' ----------------------------------(2)通過(guò)對(duì)數(shù)據(jù)集長(zhǎng)度和密碼疊加變量的比例算法求出對(duì)換位置,和加密碼部分(5)一樣 t = 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) .計(jì)次循環(huán)首 (8, i) 加入成員 (對(duì)換位置組, t × lk ÷ (lk + t)) t = t - 1.69 lk = lk × 0.459 .計(jì)次循環(huán)尾 () ' ----------------------------------(3)開(kāi)始對(duì)換隨機(jī)變量集在數(shù)據(jù)集里的位置,并把數(shù)據(jù)集和隨機(jī)變量集切分出來(lái),對(duì)換位置和加密部分(6)略有不同 k = 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) - 7 ' ------ 開(kāi)始反向?qū)Q 臨時(shí)變量 = 取空白字節(jié)集 (1) .計(jì)次循環(huán)首 (8, i) 單個(gè)對(duì)換位置 = 對(duì)換位置組 [9 - i] ' ------ 開(kāi)始反向?qū)Q 臨時(shí)變量 [1] = 數(shù)據(jù)集 [單個(gè)對(duì)換位置] 數(shù)據(jù)集 [單個(gè)對(duì)換位置] = 數(shù)據(jù)集 [k] 數(shù)據(jù)集 [k] = 臨時(shí)變量 [1] k = k + 1 .計(jì)次循環(huán)尾 () k = 取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集) 隨機(jī)變量集 = 取字節(jié)集右邊 (數(shù)據(jù)集, 8) ' ------ 分割出隨機(jī)變量集 數(shù)據(jù)集 = 取字節(jié)集中間 (數(shù)據(jù)集, 1, k - 8) ' ------ 分割出數(shù)據(jù)集 ' ----------------------------------(4)開(kāi)始解密出隨機(jī)數(shù),和加密部分(4)取反向操作 j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (取字節(jié)集長(zhǎng)度 (隨機(jī)變量集), i) 隨機(jī)變量集 [i] = 隨機(jī)變量集 [i] - 密碼集 [j] - 密碼疊加量 j = j - 1 .如果真 (j = 0) j = 取字節(jié)集長(zhǎng)度 (密碼集) .如果真結(jié)束 .計(jì)次循環(huán)尾 () 隨機(jī)數(shù) = 到數(shù)值 (到文本 (隨機(jī)變量集)) 隨機(jī)數(shù) = 隨機(jī)數(shù) - 密碼疊加量 ' ----------------------------------(5)開(kāi)始解密數(shù)據(jù)集,和加密部分(3)取反向操作 j = 取字節(jié)集長(zhǎng)度 (密碼集) .計(jì)次循環(huán)首 (取字節(jié)集長(zhǎng)度 (數(shù)據(jù)集), i) 數(shù)據(jù)集 [i] = 數(shù)據(jù)集 [i] - 密碼集 [j] - 密碼疊加量 - 隨機(jī)數(shù) j = j - 1 .如果真 (j = 0) j = 取字節(jié)集長(zhǎng)度 (密碼集) .如果真結(jié)束 .計(jì)次循環(huán)尾 () 返回 (0) .如果真結(jié)束 返回 (10) .子程序 _打開(kāi)文件加密_被單擊 .局部變量 file1, 整數(shù)型, , , 要加密的文件號(hào) .局部變量 file2, 整數(shù)型, , , 加密后新建的文件號(hào) .局部變量 code, 字節(jié)集, , , 要加密碼的密碼 .局部變量 exc, 文本型, , "0", 取文件名格式用 .局部變量 文件長(zhǎng)度, 長(zhǎng)整數(shù)型, , , 要加密的文件大小 .局部變量 循環(huán)次數(shù), 整數(shù)型, , , 加密循環(huán)次數(shù) .局部變量 FSO, 對(duì)象, , , 用于讀取文件屬性信息 .局部變量 GetFile, 對(duì)象, , , 用于讀取文件屬性信息 .局部變量 temp, 字節(jié)集, , , 臨時(shí)存放字節(jié)集 .局部變量 i, 整數(shù)型, , , 提示加密進(jìn)度用 ' 加密時(shí)是以80萬(wàn)計(jì)/次讀入數(shù)據(jù)的,每次循環(huán)加密后的文件都會(huì)多出8字節(jié)的隨機(jī)密匙,所以解密時(shí)要以80.008萬(wàn)/次讀入數(shù)據(jù)。 code = 到字節(jié)集 (密碼編輯框.內(nèi)容) .如果真 (通用對(duì)話(huà)框1.打開(kāi) ()) file1 = 打開(kāi)文件 (通用對(duì)話(huà)框1.文件名, #讀寫(xiě), ) FSO.創(chuàng)建 (“Scripting.FileSystemObject”, ) GetFile = FSO.對(duì)象型方法 (“GetFile”, 通用對(duì)話(huà)框1.文件名) 文件長(zhǎng)度 = GetFile.讀數(shù)值屬性 (“Size”, ) exc = 分割文本 (通用對(duì)話(huà)框1.文件名, “\”, ) file2 = 打開(kāi)文件 (取當(dāng)前目錄 () + “\CNA+” + exc [取數(shù)組成員數(shù) (exc)], #改寫(xiě), ) 狀態(tài)條1.置文本 (0, “狀態(tài):正在加密..”) 狀態(tài)條1.置文本 (1, “文件:” + 到文本 (exc [取數(shù)組成員數(shù) (exc)])) 循環(huán)次數(shù) = 到整數(shù) (文件長(zhǎng)度 \ 800000) + 1 .計(jì)次循環(huán)首 (循環(huán)次數(shù), i) temp = 讀入字節(jié)集 (file1, 800000) CNA數(shù)據(jù) (temp, code, 1) 寫(xiě)出字節(jié)集 (file2, temp) 狀態(tài)條1.置文本 (2, “進(jìn)度:” + 到文本 (取整 (i ÷ 循環(huán)次數(shù) × 100)) + “%”) ' -----進(jìn)度顯示以百分比方式顯現(xiàn) .計(jì)次循環(huán)尾 () 狀態(tài)條1.置文本 (0, “狀態(tài):加密完成”) 關(guān)閉文件 (file2) 關(guān)閉文件 (file1) .如果真結(jié)束 .子程序 _打開(kāi)文件解密_被單擊 .局部變量 file1, 整數(shù)型, , , 要加密的文件號(hào) .局部變量 file2, 整數(shù)型, , , 加密后新建的文件號(hào) .局部變量 code, 字節(jié)集, , , 要加密碼的密碼 .局部變量 exc, 文本型, , "0", 取文件名格式用 .局部變量 文件長(zhǎng)度, 長(zhǎng)整數(shù)型, , , 要加密的文件大小 .局部變量 循環(huán)次數(shù), 整數(shù)型, , , 解密循環(huán)次數(shù) .局部變量 FSO, 對(duì)象, , , 用于讀取文件屬性信息 .局部變量 GetFile, 對(duì)象, , , 用于讀取文件屬性信息 .局部變量 temp, 字節(jié)集, , , 臨時(shí)存放字節(jié)集 .局部變量 i, 整數(shù)型, , , 提示加密進(jìn)度用 ' 注意: 加密時(shí)是以80萬(wàn)計(jì)/次讀入數(shù)據(jù)的,每次循環(huán)加密后的文件都會(huì)多出8字節(jié)的隨機(jī)密匙,所以解密時(shí)要以80.008萬(wàn)/次讀入數(shù)據(jù)。 code = 到字節(jié)集 (密碼編輯框.內(nèi)容) .如果真 (通用對(duì)話(huà)框1.打開(kāi) ()) file1 = 打開(kāi)文件 (通用對(duì)話(huà)框1.文件名, #讀寫(xiě), ) FSO.創(chuàng)建 (“Scripting.FileSystemObject”, ) GetFile = FSO.對(duì)象型方法 (“GetFile”, 通用對(duì)話(huà)框1.文件名) 文件長(zhǎng)度 = GetFile.讀數(shù)值屬性 (“Size”, ) exc = 分割文本 (通用對(duì)話(huà)框1.文件名, “\”, ) file2 = 打開(kāi)文件 (取當(dāng)前目錄 () + “\CNA-” + exc [取數(shù)組成員數(shù) (exc)], #改寫(xiě), ) 狀態(tài)條1.置文本 (0, “狀態(tài):正在解密..”) 狀態(tài)條1.置文本 (1, “文件:” + 到文本 (exc [取數(shù)組成員數(shù) (exc)])) 循環(huán)次數(shù) = 到整數(shù) (文件長(zhǎng)度 \ 800008) + 1 ' 注意要多出8字節(jié) .計(jì)次循環(huán)首 (循環(huán)次數(shù), i) temp = 讀入字節(jié)集 (file1, 800008) ' 看文件大小讀入多少字節(jié),如果文件非常大,則可以通過(guò)移動(dòng)文件指針?lè)绞椒侄芜M(jìn)行加密 CNA數(shù)據(jù) (temp, code, ) 寫(xiě)出字節(jié)集 (file2, temp) 狀態(tài)條1.置文本 (2, “進(jìn)度:” + 到文本 (取整 (i ÷ 循環(huán)次數(shù) × 100)) + “%”) ' -----進(jìn)度顯示以百分比方式顯現(xiàn) .計(jì)次循環(huán)尾 () 狀態(tài)條1.置文本 (0, “狀態(tài):解密完成”) 關(guān)閉文件 (file1) 關(guān)閉文件 (file2) .如果真結(jié)束 |
運(yùn)行結(jié)果:
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接