1700416838
1700416839
MsgBox plaintext
1700416840
1700416841
与进行加密的程序相反,解密使用的是从字符编码中减去3的方法。在最初弹出的窗口中输入密文(就输入刚才得到的QLNNHL),然后单击OK按钮,在接下来弹出的窗口中就会显示解密后的明文NIKKEI(如图10.2所示),怎么样?看起来挺酷的吧!
1700416842
1700416843
图10.2 代码清单10.2的执行结果
1700416844
1700416845
1700416846
1700416847
1700416848
也就是说,加上3是加密,减去3是解密。因此通常把像3这样用于加密和解密的数字称为“密钥”。如果事先把3这个密钥作为只有数据的发送方和接收方才知道的秘密,那么不知道这个密钥的人,就无法对加密的数据进行解密
1700416849
1700416850
下面再试着编写一个加密程序。这次由用户指定密钥的值。该程序通过把每一个字符的编码与密钥做XOR运算(eXclusive OR,逻辑异或运算),将明文转换成密文(如代码清单10.3所示)。
1700416851
1700416852
代码清单10.3 通过XOR运算进行加密和解密
1700416853
1700416854
k=InputBox(“请输入密钥”)
1700416855
1700416856
key=CInt(k)
1700416857
1700416858
text1=InputBox(“请输入明文或密文”)
1700416859
1700416860
text2=””
1700416861
1700416862
For i=1 To Len(text1)
1700416863
1700416864
letter=Mid(text1,i,1)
1700416865
1700416866
text2=text2&Chr(Asc(letter) Xor key)
1700416867
1700416868
Next
1700416869
1700416870
MsgBox text2
1700416871
1700416872
XOR运算的有趣之处在于,用XOR运算加密后的密文,可以通过相同的XOR运算解密。也就是说一个程序既可用于加密又可用于解密,很方便(如图10.3所示)
1700416873
1700416874
图10.3 代码清单10.3执行结果
1700416875
1700416876
1700416877
1700416878
1700416879
XOR运算法则是把两个数据先分别用二进制表示,然后当一个数据中的某一位与另一个数据中的1相对时,就将这一位反转(若这一位是0就变成1,是1就变成0)(异或算法的法则也可以描述成如果对应位置上的两个二进制数a,b的值相同,则结果为0.如果a,b的值不相同,则结果为1)。因为是靠反转数字实现的加密,所以只要再反转一次就可以解密。图10.4展示了密钥3(用二进制表示是00000011)和字母N(其字符编码用二进制表示是01001110)做XOR运算的结果,请确认通过反转和再反转还原出字母N的过程:N的字符编码先和3进行XOR运算,结果是字母M的字符编码;M的字符编码再和3进行XOR运算,结果就又回到了N的字符编码
1700416880
1700416881
图10.4 通过反转和再反转即可还原
1700416882
1700416883
1700416884
1700416885
1700416886
1700416887
[
上一页 ]
[ :1.700416838e+09 ]
[
下一页 ]