某種數(shù)據(jù)加密方法描述如下(加密前后的數(shù)值都是0~255的整數(shù)):
?以m個數(shù)據(jù)為一段,將n個待加密數(shù)據(jù)依次分割成若干個數(shù)據(jù)段。剩余數(shù)據(jù)(個數(shù)小于 m)為一個獨立數(shù)據(jù)段。
?數(shù)據(jù)段加密規(guī)則:
數(shù)據(jù)個數(shù)等于m的數(shù)據(jù)段,先進行值變換,再進行位置變換,得到加密數(shù)據(jù)段。
數(shù)據(jù)個數(shù)小于m的數(shù)據(jù)段,只進行值變換,直接得到加密數(shù)據(jù)段。
?依次合并加密數(shù)據(jù)段,即為最后的加密數(shù)據(jù)。
值變換:用值變換密鑰數(shù)組x(元素個數(shù)為m,值為0~255的整數(shù)),將待加密數(shù)據(jù)段中的數(shù)據(jù)進行值變換,方法如下:
值變換后第i個元素=(待加密數(shù)據(jù)段第i個元素+x(i)) Mod 256,其中i=1,2,…,m 位置變換:用位置變換密鑰數(shù)組y(元素個數(shù)為m,值為1~m的不重復整數(shù)),將上述值變換后的m個元素進行段內位置變換,方法如下:
加密后數(shù)據(jù)段第y(i)個元素=值變換后第i個元素,其中i=1,2,…,m
例如,n=5,m=3的數(shù)據(jù)加密過程如下:
段內序號待加密數(shù)據(jù)密鑰數(shù)組x 值變換后數(shù)據(jù)密鑰數(shù)組y 加密后數(shù)據(jù)
(1)已知m=3,數(shù)組x與數(shù)組y中的數(shù)據(jù)如下表所示。則待加密數(shù)據(jù)段“155,1,250”加密后的數(shù)據(jù)段為
21,24,165
21,24,165
(填數(shù)據(jù),用逗號分隔)。
x(1) |
x(2) |
x(3) |
|
y(1) |
y(2) |
y(3) |
10 |
20 |
30 |
|
3 |
1 |
2 |
(2)小張根據(jù)上述加密算法,設計了一個對應的解密程序,其VB代碼如下,請在橫線處填入合適的代碼(解密與加密使用相同的密鑰數(shù)據(jù))。
Private Sub Command1_Click ( )
Const n=100
Const m=6
Dim i As Integer,j As Integer
Dim a(1 To n) As Integer,b(1 To n) As Integer
Dim x(1 To m) As Integer,y(1 To m) As Integer
'讀取值變換與位置變換的密鑰數(shù)據(jù),分別保存在數(shù)組x與y中,代碼略。
'讀取待解密數(shù)據(jù),保存在數(shù)組a中,代碼略。
'下面進行位置變換:位置變換后數(shù)據(jù)保存到數(shù)組b中
For i=1 To
①
①
For j=1 To m
②
②
Next j Next i
For i=(n\m)*m+1 To n
b(i)=a(i)
Next i
'下面進行值變換:值變換后數(shù)據(jù)仍保存到數(shù)組b中
j=1
For i=1 To n
b(i)=
③
③
j=j+1
If j>m
Then j=1
Next i
'輸出解密后數(shù)據(jù),代碼略。
End Sub