返回介绍

10.2 错开字符编码的加密方式

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

有关加密的概念和术语先解释到这里,下面就通过运行程序来实际体验一下加密的过程吧。代码清单10.1中,列出了一段用于加密的示例程序。

代码清单10.1 用给字符编码加3的方法加密

plaintext=InputBox(“请输入明文”)

ciper=””

For i=1 To Len(plaintext)

letter=Mid(plaintext,i,1)

cipher=cipher&Chr(Asc(letter)+3)

Next

MsgBox cipher

在这个程序中,使用了如下加密方法:将文本数据中每个字符所对应的字符编码一律向后错3个,即给原字符编码的值加上3。把这段程序以.vbs为扩展名保存,双击运行这段程序。试着在最初弹出的窗口中输入要加密的文本数据(明文),例如输入NIKKEI,单击OK按钮,在接下来弹出的窗口中会显示出加密后的文本数据(密文)。因为每个字符的编码都向后错了三个,所以得到的是QLNNHL。这样的话,即便是被人偷偷地看到了,也无法理解这个字符串的意义(如图10.1所示)

图10.1 代码清单10.1的执行结果

因为加密时使用的是将字符编码向后错三个的方法,所以只要再将字符编码向前挪三个就可以实现解密。代码清单10.2中就是解密程序

代码清单10.2 用把字符编码减3的方法解密

cipher=InputBox(“请输入密文”)

plaintext=””

For i=1 To Len(cipher)

letter=Mid(cipher,i,1)

plaintext=plaintext&Chr(Asc(letter)-3)

Next

MsgBox plaintext

与进行加密的程序相反,解密使用的是从字符编码中减去3的方法。在最初弹出的窗口中输入密文(就输入刚才得到的QLNNHL),然后单击OK按钮,在接下来弹出的窗口中就会显示解密后的明文NIKKEI(如图10.2所示),怎么样?看起来挺酷的吧!

图10.2 代码清单10.2的执行结果

也就是说,加上3是加密,减去3是解密。因此通常把像3这样用于加密和解密的数字称为“密钥”。如果事先把3这个密钥作为只有数据的发送方和接收方才知道的秘密,那么不知道这个密钥的人,就无法对加密的数据进行解密

下面再试着编写一个加密程序。这次由用户指定密钥的值。该程序通过把每一个字符的编码与密钥做XOR运算(eXclusive OR,逻辑异或运算),将明文转换成密文(如代码清单10.3所示)。

代码清单10.3 通过XOR运算进行加密和解密

k=InputBox(“请输入密钥”)

key=CInt(k)

text1=InputBox(“请输入明文或密文”)

text2=””

For i=1 To Len(text1)

letter=Mid(text1,i,1)

text2=text2&Chr(Asc(letter) Xor key)

Next

MsgBox text2

XOR运算的有趣之处在于,用XOR运算加密后的密文,可以通过相同的XOR运算解密。也就是说一个程序既可用于加密又可用于解密,很方便(如图10.3所示)

图10.3 代码清单10.3执行结果

XOR运算法则是把两个数据先分别用二进制表示,然后当一个数据中的某一位与另一个数据中的1相对时,就将这一位反转(若这一位是0就变成1,是1就变成0)(异或算法的法则也可以描述成如果对应位置上的两个二进制数ab的值相同,则结果为0.如果ab的值不相同,则结果为1)。因为是靠反转数字实现的加密,所以只要再反转一次就可以解密。图10.4展示了密钥3(用二进制表示是00000011)和字母N(其字符编码用二进制表示是01001110)做XOR运算的结果,请确认通过反转和再反转还原出字母N的过程:N的字符编码先和3进行XOR运算,结果是字母M的字符编码;M的字符编码再和3进行XOR运算,结果就又回到了N的字符编码

图10.4 通过反转和再反转即可还原

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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