Vb6 如何将Blowfish加密添加到Winsock数据?

Vb6 如何将Blowfish加密添加到Winsock数据?,vb6,winsock,blowfish,Vb6,Winsock,Blowfish,我有一个河豚类,我在星球上找到的源代码,我相信。我正在加密发送到服务器的字符串。然后试图从数据中解密字符串,我不断得到一个错误。我不知道发生了什么,也不知道我做错了什么。它在文本框中进行加密和解密非常有效,但由于某些原因,它无法通过winsock工作。也许有人能帮我解决这个问题 这是我在客户端连接事件中的代码 Dim crypt As clsBlowFish Set crypt = New clsBlowFish Dim strPrivate As String Dim strUser As S

我有一个河豚类,我在星球上找到的源代码,我相信。我正在加密发送到服务器的字符串。然后试图从数据中解密字符串,我不断得到一个错误。我不知道发生了什么,也不知道我做错了什么。它在文本框中进行加密和解密非常有效,但由于某些原因,它无法通过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整除

发送的数据似乎工作正常。在发送之前,我已经在messagebox中显示了加密文本,它显示的好像是加密的,然后我在发送时嗅探数据包,它也是加密的,所以问题出在服务器端

我使用了同样的代码,使用文本框进行加密和解密,效果非常好,但通过winsock发送似乎不起作用。也许我没有正确接收数据

编辑: 谢谢雷米·勒博

我通过像这样加密所有文本来修复它


调用crypt.StringEncrypt(Chr(&H1)和“ENTER”&txtersername.Text和“CHAT”,struserencrypt)

您的服务器代码没有注意到它接收的数据的结构。并非所有数据都是加密的。加密数据前面是
Chr(&H1)&“ENTER”
,后面是
“CHAT”
。服务器当前正在读取套接字缓冲区中恰好在该时刻可用的任何原始数据,然后按原样解密整个数据。它需要读取,直到它收到
Chr(&H1)&“ENTER”
,然后读取,直到它收到
“CHAT”
,最后它只能解密它们之间的数据。

它应该在第一个数据包中接收所有数据,因为这是发送的第一个数据包,并且它完全在一个数据包中?你是说即使是这样一个小的数据包也会以单独的数据包的形式到达吗?无论如何,我理解你的意思,我试图将整个数据包解析为一个加密的数据包,而其中只有一部分是加密的。这就是我出错的地方我想把所有的都加密。我甚至没有注意到我在那里做了什么。谢谢你指出这一点。我把其余的都添加到加密中,第一次尝试就成功了。正如我所说,“服务器当前正在读取套接字缓冲区中恰好在那个时刻可用的任何原始数据”。因此,是的,客户端的消息可能会在多个读取中被分割。你必须对此负责。