2014-10-07 3 views
0

나는 내가 믿는 행성 소스 코드에서 발견 한 복어 클래스를 가지고있다. 내 서버로 전송되는 문자열을 암호화하고 있습니다. 그런 다음 데이터 arrvial에서 문자열을 해독하려고하면 오류가 계속 발생합니다. 나는 무슨 일이 일어나고 있는지 또는 내가 뭘 잘못하고 있는지 모르겠습니다. 텍스트 상자에서 훌륭한 암호화 및 암호 해독 기능을하지만 어떤 이유로 winsock을 통해 작동하지 않습니다. 어쩌면 누군가가 나를 알아낼 수 있습니다.Blowfish 암호화를 Winsock 데이터에 어떻게 추가 할 수 있습니까?

내 클라이언트 연결 이벤트에있는 코드입니다. 클라이언트가 연결하고 서버가 나에게

런타임을 말하는 오류가 제공하는 데이터를수록 나는 즉시 내 데이터 도달

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) 

을이이 서버 측에

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" 

오류 '-2147218101 (80040d4b)':

해독 할 문자열의 크기를 8로 나눌 수 있어야합니다.

보내는 데이터가 정상적으로 작동하는 것 같습니다. 암호화 된 텍스트를 메시지 박스에 표시하기 전에 메시지를 표시하고 암호화 된 텍스트를 보낸 것처럼 패킷을 암호화하고 암호화하여 해당 문제가 서버 측에있는 것처럼 보여줍니다.

텍스트 상자를 사용하여 암호화하고 해독하는 것과 똑같은 코드를 사용했지만 완벽하게 작동했지만 winsock을 통해 전송하는 것이 효과가없는 것 같습니다. 데이터를 제대로받지 못했을 수 있습니까? 편집

: 감사 레미 Lebeau

나는과 같이 모든 텍스트를 암호화하여 고정.

전화 crypt.StringEncrypt (대하 (& H1) &는 "채팅"& txtUsername.Text &을 "ENTER", strUserEncrypted)

답변

2

귀하의 서버 코드는 수신되는 데이터의 구조에주의를 지불하지 않습니다. 모든 데이터가 암호화되는 것은 아닙니다. 암호화 된 데이터의 앞에는 Chr(&H1) & "ENTER"과 그 뒤에 "CHAT"이옵니다. 서버는 현재 정확한 순간에 소켓 버퍼에서 사용할 수있는 원시 데이터를 읽은 다음 모든 것을 그대로 해독합니다. Chr(&H1) & "ENTER"을받을 때까지 읽어야하고 "CHAT"을받을 때까지 읽은 다음 마지막으로 그 사이의 데이터 만 해독 할 수 있습니다.

+0

첫 번째 패킷에있는 모든 패킷을 수신해야합니다. 첫 번째 패킷은 전송 된 패킷이므로 하나의 패킷에 모두 포함되어 있습니까? 작은 패킷 일지라도 별도의 패킷에 도착한다는 말입니까? – FrostByte

+0

Nevermind 나는 그 중 일부만 암호화 할 때 전체 패킷을 하나의 암호화 된 패킷으로 구문 분석하려고한다는 것을 이해합니다. 그것이 잘못된 곳으로, 암호화 된 모든 것을 원했습니다. 나는 내가 한 일을 눈치 채지 못했습니다. 그 점을 지적 해 주셔서 감사합니다. 나머지 부분을 암호화에 추가했는데 첫 번째 시도가 성공했습니다. – FrostByte

+0

내가 말했듯이 "서버는 현재 정확한 순간 ** 소켓 버퍼 **에서 사용 가능한 원시 데이터를 읽습니다." 그래서 예, 고객의 메시지는 여러 번 읽어 들일 수 있습니다. 그 점을 고려해야합니다. –