【发布时间】:2014-10-07 22:38:40
【问题描述】:
我相信我在行星源代码中找到了一个河豚类。我正在加密一个正在发送到我的服务器的字符串。然后尝试从数据到达中解密字符串,我不断收到错误消息。我不确定发生了什么或我做错了什么。它可以很好地在文本框中进行加密和解密,但由于某种原因,它不能通过 winsock 工作。也许有人可以帮我解决这个问题。
这是我在客户端连接事件中的代码。
Dim crypt As clsBlowFish
Set crypt = New clsBlowFish
Dim strPrivate As String
Dim strUser As String, strUserEncrypted As String
strPrivate = "aDq&s3kUsvVKNm-dRCF2-XJC%5j&%hL5*S5=bu%ZFLsc2D2"
Call crypt.BlowFish(strPrivate)
Call crypt.StringEncrypt(txtUsername.Text, strUserEncrypted)
sOCk.SendData Chr(&H1) & "ENTER" & strUserEncrypted & "CHAT"
在服务器端,我的数据到达中有这个
Dim crypt As clsBlowFish
Set crypt = New clsBlowFish
Dim strPrivate As String
Dim strEncrypted as string, strDecrypted as string
strPrivate = "aDq&s3kUsvVKNm-dRCF2-XJC%5j&%hL5*S5=bu%ZFLsc2D2"
sOCk.GetData strData, vbString
strEncrypted = strData
Call crypt.BlowFish(strPrivate)
Call crypt.StringDecrypt(strEncrypted, strDecrypted)
一旦客户端连接并且服务器获取数据,它就会给我一个错误提示
运行时错误'-2147218101(80040d4b)':
要解密的字符串的大小应能被 8 整除
正在发送的数据似乎工作正常。我在发送之前在消息框中显示了加密文本,它显示好像它已加密,然后我嗅探数据包,因为它正在发送并且它也被加密,所以问题出在服务器端。
我已经使用文本框使用相同的代码来加密和解密,它运行良好,但通过 winsock 发送似乎不起作用。也许我没有正确接收数据?
编辑: 谢谢雷米勒博
我通过像这样加密所有文本来修复它。
调用 crypt.StringEncrypt(Chr(&H1) & "ENTER" & txtUsername.Text & "CHAT", strUserEncrypted)
【问题讨论】: