Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich einen Telegram-Autorisierungsschlüssel in VB.Net?

Wie erstelle ich einen Telegram-Autorisierungsschlüssel in VB.Net?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 05:45:11122Durchsuche

How to Generate a Telegram Authorization Key in VB.Net?

Bisher konnte ich die Telegram-Autorisierung vollständig umsetzen, allerdings nicht in Ihrer gewünschten Sprache - PHP, ich habe vb.Net verwendet. Ich glaube jedoch, dass die gleiche Logik gelten sollte.


Das Erstellen eines Telegram-Autorisierungsschlüssels


Telegram API ist kein Kinderspiel im Park. Das Studium des vorhandenen Quellcodes könnte (meiner Meinung nach) ziemlich entmutigend sein. Daher bestand mein Ansatz darin, die Online-API-Dokumentation zu studieren und den in den Links beschriebenen „sample-auth_key“ zu implementieren unten.


https://core.telegram.org/mtproto/auth_key


https://core.telegram.org/mtproto/ Samples-auth_key


Mit diesem Ansatz erhalten Sie ein besseres Verständnis und Einführung in die Grundelemente, die in der gesamten Telegram-API verwendet werden, und möglicherweise dabei helfen, Ihre eigenen Funktionen und Routinen zu organisieren, die Sie für die nächsten Schritte benötigen – Implementierung anderer Funktionen der API, da die Generierung eines AuthKey nur der Anfang ist.< ;/p>

Schritt 1


Die gesamte Kommunikation erfolgt einmalig über TCP Sie eine eindeutige api_id erhalten haben (https://core.telegram.org/api/obtaining_api_id#obtaining-api-id), finden Sie die folgende IP, die zur Verwendung in Tests angekündigt wird: 149.154.167.40:433 Die api_id ist zu diesem Zeitpunkt zum Generieren einer nicht erforderlich AuthKey


Richten Sie Ihre bevorzugte Methode der Sende-/Empfangs-TCP-Verarbeitungsschleife ein


was ich habe, ist ein privates SendData, das einfach ein Byte an einen Live-Socket sendet verbunden mit der oben angegebenen IP-Adresse


<pre class="brush:php;toolbar:false">If Not IsConnected() Then
    Log(&quot;Connection Closed!&quot;, ConsoleColor.DarkRed)
    RaiseEvent Disconneted()
    Exit Sub
End If

b = TCPPack(b)

Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep}
AddHandler arg.Completed, AddressOf IO_Handler
arg.SetBuffer(b, 0, b.Length)

Try
    If Not soc.SendAsync(arg) Then
        IO_Handler(soc, arg)
    End If

    If read Then
        ReadData()
    End If
Catch ex As Exception
        Log(&quot;SendData: &quot; &amp; ex.ToString, ConsoleColor.Red)
End Try

Ende Sub

Private Sub ReadData(Optional wait As Integer = 0)

If Not IsConnected() Then
    Log(&quot;Connection Closed!&quot;, ConsoleColor.DarkRed)
    RaiseEvent Disconneted()
    Exit Sub
End If

Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep}
AddHandler arg.Completed, AddressOf IO_Handler

Dim b(BUFFER_SIZE - 1) As Byte
arg.SetBuffer(b, 0, BUFFER_SIZE)

Try
    If Not soc.ReceiveAsync(arg) Then
        IO_Handler(soc, arg)
    End If
Catch ex As Exception
    Log(&quot;ReadMessages: &quot; &amp; ex.ToString, ConsoleColor.Red)
End Try

End Sub

Private Sub IO_Handler(sender As Object, e As SocketAsyncEventArgs)

Log($&quot;{e.LastOperation}:{e.SocketError}:{e.BytesTransferred}&quot;, ConsoleColor.Cyan)

Select Case e.SocketError
    Case SocketError.Success
        Select Case e.LastOperation
            Case SocketAsyncOperation.Connect 'A socket Connect operation.
                Log(&quot;Connected to &quot; &amp; e.ConnectSocket.RemoteEndPoint.ToString, ConsoleColor.Green)
                are.Set()

                Case SocketAsyncOperation.Disconnect, SocketAsyncOperation.Connect
                    RaiseEvent Disconneted()

            Case SocketAsyncOperation.Receive 'A socket Receive operation.
                    HandleData(e)
        End Select

    Case SocketError.ConnectionAborted
            RaiseEvent Disconneted()
End Select

Sub beenden

Privater Sub HandleData(e As SocketAsyncEventArgs)

<pre class="brush:php;toolbar:false">If Not IsConnected() Then Log(&quot;Connection Closed!&quot;, ConsoleColor.DarkRed) RaiseEvent Disconneted() Exit Sub End If b = TCPPack(b) Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep} AddHandler arg.Completed, AddressOf IO_Handler arg.SetBuffer(b, 0, b.Length) Try If Not soc.SendAsync(arg) Then IO_Handler(soc, arg) End If If read Then ReadData() End If Catch ex As Exception Log(&quot;SendData: &quot; &amp; ex.ToString, ConsoleColor.Red) End Try

End Sub

Abschließend benötigen wir für diesen Schritt eine TcpPack()-Methode, die uns hilft, unsere Daten in dem von Telegram erwarteten Format aufzufüllen – siehe Code unten mit Kommentaren


If Not IsConnected() Then
    Log(&quot;Connection Closed!&quot;, ConsoleColor.DarkRed)
    RaiseEvent Disconneted()
    Exit Sub
End If

Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep}
AddHandler arg.Completed, AddressOf IO_Handler

Dim b(BUFFER_SIZE - 1) As Byte
arg.SetBuffer(b, 0, BUFFER_SIZE)

Try
    If Not soc.ReceiveAsync(arg) Then
        IO_Handler(soc, arg)
    End If
Catch ex As Exception
    Log(&quot;ReadMessages: &quot; &amp; ex.ToString, ConsoleColor.Red)
End Try

Ende Funktion


SCHRITT 2


Nachdem die grundlegenden TCP-Sende-/Empfangsroutinen eingerichtet sind, können wir mit der Vorbereitung beginnen Datenpakete zum Senden an Telegram und Unterroutinen zur Verarbeitung der spezifischen empfangenen Antworten - ProcessResponse(data)


Was wir als Nächstes verstehen müssen, ist die Tatsache, dass Telegram zwei große Kategorien von Nachrichten verarbeitet –


< p>Unverschlüsselt - https://core.telegram.org/mtproto/description#unencrypted-message


Dies sind reine Textnachrichten mit ihrer auth_key_id =0. Beim Generieren eines AuthKey wird dieser Nachrichtentyp durchgehend verwendet

Verschlüsselt - https://core.telegram.org/mtproto/description#encrypted-message-encrypted-data


Die gesamte weitere Kommunikation mit Telegram-Servern erfolgt über verschlüsselte Nachrichten


Ich wähle zwei Klassen, um beide Nachrichtentypen zu kapseln. Ich kann dann zwei Send(m)-Methoden haben, die jeden Typ verarbeiten


Log($&quot;{e.LastOperation}:{e.SocketError}:{e.BytesTransferred}&quot;, ConsoleColor.Cyan)

Select Case e.SocketError
    Case SocketError.Success
        Select Case e.LastOperation
            Case SocketAsyncOperation.Connect 'A socket Connect operation.
                Log(&quot;Connected to &quot; &amp; e.ConnectSocket.RemoteEndPoint.ToString, ConsoleColor.Green)
                are.Set()

                Case SocketAsyncOperation.Disconnect, SocketAsyncOperation.Connect
                    RaiseEvent Disconneted()

            Case SocketAsyncOperation.Receive 'A socket Receive operation.
                    HandleData(e)
        End Select

    Case SocketError.ConnectionAborted
            RaiseEvent Disconneted()
End Select

End Sub

Private Sub Send(m As EncryptedMessage)

If e.BytesTransferred = 0 Then --no pending data
    Log(&quot;The remote end has closed the connection.&quot;)
    Exit Sub
End If

Dim len As Integer = e.Buffer(0)
Dim start = 1

If len = &amp;H7F Then
    len = e.Buffer(1)
    len += e.Buffer(2) << 8
    len += e.Buffer(3) << 16
    start = 4
End If

len = 4 * len

Dim data(len - 1) As Byte
Array.Copy(e.Buffer, start, data, 0, len)


ProcessResponse(data)

ReadData()

End Sub


For jetzt ist nur noch UnencryptedMessage erforderlich


Dim a = New List(Of Byte)
Dim len = CByte(b.Length / 4)

If efSent = False Then --TCP abridged version
    efSent = True
    a.Add(&HEF)
End If

If len >= &H7F Then
    a.Add(&H7F)
    a.AddRange(BitConverter.GetBytes(len))
Else
    a.Add(len)
End If

a.AddRange(b) --only data, no sequence number, no CRC32

Return a.ToArray

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Telegram-Autorisierungsschlüssel in VB.Net?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn