J'ai ordonné un peu mes classes, donc petite mise à jour de mon code :
Cliquez pour révéler
Cliquez pour masquer
Case 3
ID_Message = New Messages.Connection.HelloConnectMessage
ID_Message.unpack(PacketReceived)
Dim account As String = TextAccount.Text
Dim password As String = TextPassword.Text
Dim salt As String = ID_Message.salt
Dim key As List(Of Integer) = ID_Message.key
Dim cryptedPassword = New RSAManager().Encrypt(salt + password.Count + password + account, key)
Dim version As Types.Version.Version = New Types.Version.Version
version.initVersion(2, 9, 0, 67791, 1, 0)
Dim message As Messages.Connection.IdentificationMessage = New Messages.Connection.IdentificationMessage
message.initIdentificationMessage(version, "fr", cryptedPassword, 0, True, False, True)
message.pack(PacketSend)
PacketReceived = D*fus.D*fusReader
PacketSend = D*fus.D*fusWriter
Ma classe HelloConnectMessage :
Cliquez pour révéler
Cliquez pour masquer
Namespace Messages.Connection
Public Class HelloConnectMessage
Public salt As String = ""
Public key As New List(Of Integer)
Public protocolId As UInteger = 3
Public Function HelloConnectMessage()
Me.key = New List(Of Integer)
Return Me
End Function
Public Function unpack(ByVal param1 As D*fus.D*fusReader)
Dim _loc_4 As Integer
Me.salt = param1.ReadUTF()
Dim _loc_2 As UShort = param1.ReadUnSignedshort()
Dim _loc_3 As UInteger
While (_loc_3 < _loc_2)
_loc_4 = param1.ReadByte()
Me.key.Add(_loc_4)
_loc_3 += 1
End While
Return Me
End Function
End Class
End Namespace
Ma classe IdentificationMessage :
Cliquez pour révéler
Cliquez pour masquer
Namespace Messages.Connection
Public Class IdentificationMessage
Public version As Version
Public lang As String = ""
Public credentials As List(Of Integer)
Public serverId As Integer = 0
Public autoconnect As Boolean = False
Public useCertificate As Boolean = False
Public useLoginToken As Boolean = False
Public protocolId As UInteger = 4
Public Function IdentificationMessage()
Me.version = New Version
Me.credentials = New List(Of Integer)
Return Me
End Function
Public Function initIdentificationMessage(ByVal param1 As Version, ByVal param2 As String, ByVal param3 As List(Of Integer), ByVal param4 As Integer, ByVal param5 As Boolean, ByVal param6 As Boolean, ByVal param7 As Boolean) As IdentificationMessage
Me.version = param1
Me.lang = param2
Me.credentials = param3
Me.serverId = param4
Me.autoconnect = param5
Me.useCertificate = param6
Me.useLoginToken = param7
Return Me
End Function
Public Function pack(ByVal param1 As D*fus.D*fusWriter)
Dim _loc_2 As UInteger
_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 0, Me.autoconnect)
_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 1, Me.useCertificate)
_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 2, Me.useLoginToken)
param1.WriteUInt32(_loc_2)
Me.version.pack(param1)
param1.WriteUTF(Me.lang)
param1.WriteInt32(Me.credentials.Count)
Dim _loc_3 As UInteger
While (_loc_3 < Me.credentials.Count)
param1.WriteByte(Me.credentials(_loc_3))
_loc_3 = _loc_3 + 1
End While
param1.WriteShort(Me.serverId)
Dofus.DofusWriter.Send(Me.protocolId)
Return Me
End Function
End Class
End Namespace
Ma classe Version :
Cliquez pour révéler
Cliquez pour masquer
Namespace Types.Version
Public Class Version
Public major As UInteger = 0
Public minor As UInteger = 0
Public release As UInteger = 0
Public revision As UInteger = 0
Public patch As UInteger = 0
Public buildType As UInteger = 0
Public protocolId As UInteger = 11
Public Function Version()
Return Me
End Function
Public Function initVersion(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As UInteger, ByVal param4 As UInteger, ByVal param5 As UInteger, ByVal param6 As UInteger) As Version
Me.major = param1
Me.minor = param2
Me.release = param3
Me.revision = param4
Me.patch = param5
Me.buildType = param6
Return Me
End Function
Public Function pack(ByVal param1 As Dofus.DofusWriter)
param1.WriteByte(Me.major)
param1.WriteByte(Me.minor)
param1.WriteByte(Me.release)
param1.WriteInt32(Me.revision)
param1.WriteByte(Me.patch)
param1.WriteByte(Me.buildType)
Return Me
End Function
End Class
End Namespace
Ma classe RSAManager :
Cliquez pour révéler
Cliquez pour masquer
Public Class RSAManager
Public Function Encrypt(ByVal Input As String, ByVal Key As List(Of Integer)) As List(Of Integer)
Dim buffer4 As Byte() = New Byte(3 - 1) {}
buffer4(0) = 1
buffer4(2) = 1
Dim buffer As Byte() = buffer4
Dim buffer2 As Byte() = New Byte(256 - 1) {}
Dim i As Integer
For i = 33 To 289 - 1
buffer2((i - 33)) = CByte(Key.Item(i))
Next i
Dim bytes As Byte() = Encoding.UTF8.GetBytes(Input)
Dim parameters As New RSAParameters
Dim provider As New RSACryptoServiceProvider
parameters.Modulus = buffer2
parameters.Exponent = buffer
provider.ImportParameters(parameters)
Dim list As New List(Of Integer)
Dim num2 As Byte
For Each num2 In provider.Encrypt(bytes, False)
list.Add(num2)
Next
Return list
End Function
End Class
Et j'obtient à présent cette erreur au moment de l'envoi de l'identification :
Cliquez pour révéler
Cliquez pour masquer
Packet Reçu : (Id = 1) | (Taille = 8)
Packet Reçu : (Id = 3) | (Taille = 341)
Parsing() ToDouble -> La conversion de la chaîne "hamkxpl2K1%N?}/,qz2@wQW2I+&dk0*}" en type 'Double' n'est pas valide.