我有一个我认为在行星源代码上找到的河豚类。我正在加密发送到我的服务器的字符串。然后尝试从数据arrvial解密字符串,我不断收到错误。我不确定发生了什么或我做错了什么。它在文本框中可以很好地加密和解密,但由于某些原因它不能通过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似乎不起作用。也许我没有正确收到数据?
修改: 谢谢Remy Lebeau
我通过加密所有文本来修复它。
调用crypt.StringEncrypt(Chr(& H1)&“ENTER”& txtUsername.Text&“CHAT”,strUserEncrypted)
答案 0 :(得分:2)
您的服务器代码没有注意它接收的数据结构。并非所有数据都经过加密。加密数据前面有Chr(&H1) & "ENTER"
,后跟"CHAT"
。服务器当前正在读取在该时刻恰好在套接字缓冲区中可用的原始数据,然后按原样解密整个事物。它需要先读取,直到它收到Chr(&H1) & "ENTER"
,然后读取直到它收到"CHAT"
,然后最后它只能解密它们之间的数据。