16.某加密算法的明文和密鑰均由英文字母組成,且密鑰循環(huán)使用,其加密規(guī)則如下:
①明文字符與對應密鑰的ASCII碼轉化為二進制后求異或(對應位相同時結果為0,對應位不同時結果為1,如二進制1001與二進制1100的異或值為0101),并將異或結果轉換為十進制p;
②如果處在奇數位,則將明文字符循環(huán)后移p個位置,否則將明文前移p個位置。移動過程中保持大小寫不變。
最后把所得到的字符連接起來就是密文。
例如,密鑰是“abc”,明文“d”的加密過程是:字符“d”的ASCII碼表示為二進制是1100100,密鑰“a”的ASCII碼表示為二進制是1100001,兩數進行異或結果是:0000101,轉化為十進制為5,因為是第1個位置,所以把明文后移5個位置,則密文是“i”。
該加密過程使用VB來實現。具體功能設計如下:在Text1中輸入明文,Text2中輸入密鑰,單擊“開始加密”按鈕Command1后將密文顯示在Text3中,界面設計如圖所示。
請回答以下問題:
(1)如果密鑰為“bc”,字符“d”加密后的密文為:
(字母“a”的ASCII碼為97)
(2)請完善以下程序代碼。
PrivateSubCommand1_Click
DimsAsString,snAsString
DimiAsInteger,tAsInteger,uAsInteger
DimpAsInteger,gAsInteger
sn=““
Fori=1ToLen(Text1.Text)
t=Asc(Mid(Text1.Text,i,1))
Ift>=Asc(″a″)Then
g=Asc(″a″)
Else
g=Asc(″A″)
EndIf
u=Asc(Mid(Text2.Text,(i-1)ModLen(Text2.Text)+1,1))
p=
①t=t-g
IfiMod2=1Then
t=(t+p)Mod26
Else
t=
②EndIf
sn=sn+Chr(t+g)
Nexti
Text3.Text=snEndSub
Functiontxor(xAsInteger,yAsInteger)AsInteger'x、y求異或并返回十進制
DimaAsInteger,bAsInteger,rAsInteger,iAsInteger
a=x:b=y
r=1
Fori=1To7
IfaMod2<>bMod2Then
③a=a\2
b=b\2
r=r*2
NextiEndFunction