您用于加密/解密的算法是错误的,因为来自错误的假设:加密和未加密字符串的长度必须相同(这种情况很少见)。
您目标的基本加密/解密是:
For i As Integer = 0 To text.Length - 1
RichTextBox2.Text = Chr(Asc(text(i)) Xor key) & RichTextBox2.Text
Next
哪里key
是整数。
您所做的是更改key
部分以便可以考虑字符串。问题是您为实现此目标而选择的方式并没有为两种情况(加密/解密)提供相同的密钥:您正在根据所考虑的给定长度生成密钥(加密字符串与解密字符串)因此您假设两个长度都相同,但事实并非如此。
------------------------ 更新(以整数作为键的示例代码)
在表单中添加 2 个按钮 ( ButtonEncrypt
and ButtonDecrypt
) 和两个文本框 ( TextBoxInput
and TextBoxOutput
) 并复制以下代码:
Private Sub ButtonEncrypt_Click(sender As System.Object, e As System.EventArgs) Handles ButtonEncrypt.Click
TextBoxOutput.Text = ""
Dim key As Integer = 123
Dim inputText As String = TextBoxInput.Text
For i As Integer = 0 To inputText.Length - 1
TextBoxOutput.Text = Chr(Asc(inputText(i)) Xor key) & TextBoxOutput.Text
Next
End Sub
Private Sub ButtonDecrypt_Click(sender As System.Object, e As System.EventArgs) Handles ButtonDecrypt.Click
TextBoxOutput.Text = ""
Dim key As Integer = 123
Dim inputText As String = TextBoxInput.Text
For i As Integer = 0 To inputText.Length - 1
TextBoxOutput.Text = Chr(Asc(inputText(i)) Xor key) & TextBoxOutput.Text
Next
End Sub
例如,如果您在 中输入“加密此字符串”TextBoxInput
并单击ButtonEncrypt
,您将在TextBoxOutput
. 如果现在您将这个“加密字符串”复制到TextBoxInput
并单击,ButtonDecrypt
您会看到“加密这个字符串”将出现在TextBoxInput
. 也就是说,您可以使用此代码来加密/解密任何内容。
此代码与您的代码之间的区别在于,key
我使用的代码在两种情况下都很常见(加密和解密)。您使用的不是恒定的,因为您将其定义为给定字符串(解密或加密的)长度的函数。因此,您的问题的解决方案是确保key
您在两种情况下使用的都是相同的。
最后,我想再次强调这个算法期望key
是一个整数(因为Chr
只能处理整数);但是有一个简单的解决方法(您所做的):依赖定义为字符串的密钥,并且在执行加密/解密时,将给定字符转换为整数(通过依赖Asc
)。因此,您解决问题的(一般)方法是正确的,唯一的问题是您用来解释不同字符的方式key
是错误的:它依赖于与加密/解密版本不同的给定字符串的长度,因此引发对不同密钥的会计处理;也就是说,考虑密钥 123 加密和 513 解密(愚蠢的例子)。
我希望我的观点现在更清楚了。