10.3 密钥越长,解密越困难
在因特网环境中,会有很多不固定的人群相互收发经过加密处理的数据。一般情况下,会将所使用的加密方式公开,而只对密钥的值保密。但令人遗憾的是,这个世界上还是有坏人的,有些人会窃取那些并不是发送给他们的加密数据,企图破解后用于其他目的。尽管这些人并不知道密钥的值,但他们会利用计算机强大的计算能力,用密钥所有可能的值去试着破解。例如,要想破解用XOR运算加密得到的密文MJHHFJ,程序只要把0-9这几个值分别作为密钥都尝试一遍就能做到(如代码清单10.4,图10.5所示)
代码清单10.4 通过XOR运算破解密文的程序
cipher=InputBox(“请输入密文”)
plaintext=””
For key=0 To 9
Plaintext=plaintext&”密钥”&Cstr(key)&”:”
For i=1 To Len(cipher)
letter=Mid(cipher,i,1)
plaintext=plaintext&Chr(Asc(letter) Xor key)
Next
plaintext=plaintext&Chr(&HD)
Next
MsgBox plaintext
图10.5 代码清单10.4的执行结果
在因特网上经过加密的数据也难免被窃取,因此就要先设法做到即便数据被窃取,其内容也难以被破解。为此可以把密钥设成多位数而不仅仅是一位数。下面,就试着以三位数345为密钥,通过XOR运算来进行加密(如代码清单10.5所示)。将明文中的第一个字母与3做XOR运行,第二个字母与4做XOR运算,第三个字母与5做XOR运算,从第四个字母开始,依次与3,4,5做XOR运算,依次类推(如图10.6所示)
代码清单10.5 通过与三位数进行XOR运算实现加密和解密
Dim key(2)
key(0)=3
key(1)=4
key(2)=5
text1=InputBox(“请输入明文或密文”)
text2=””
For i=1 To Len(text1)
letter=Mid(text1,i,1)
text2=text2&Chr(Asc(letter) Xor key((i-1)Mod3))
Next
MsgBox text2
图10.6 代码清单10.5的执行结果
如果仅用一位数作为密钥,那么只需要从0-9尝试十次就能破解密文。但如果用三位数密钥,那么就有从000-999的1000种可能,如果更进一步把密钥的位数增加到十位,那么就需要1010=100亿次才能破解。就算使用一秒进行100万次尝试的计算机,破解此密文也需要花费100亿/100万次/秒=10000秒≈2.78小时。密钥每增加1位,破解所花费的时间就增加10倍,密钥再进一步增长到16位的话,破解时间就是2.78小时*1000000≈317年,从所需的时间上来看,可以说破解是不可能的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论