返回介绍

10.3 密钥越长,解密越困难

发布于 2023-05-19 17:35:11 字数 1773 浏览 0 评论 0 收藏 0

在因特网环境中,会有很多不固定的人群相互收发经过加密处理的数据。一般情况下,会将所使用的加密方式公开,而只对密钥的值保密。但令人遗憾的是,这个世界上还是有坏人的,有些人会窃取那些并不是发送给他们的加密数据,企图破解后用于其他目的。尽管这些人并不知道密钥的值,但他们会利用计算机强大的计算能力,用密钥所有可能的值去试着破解。例如,要想破解用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文