Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menjana Kunci Kebenaran Telegram dalam VB.Net?

Bagaimana untuk Menjana Kunci Kebenaran Telegram dalam VB.Net?

Barbara Streisand
Barbara Streisandasal
2024-12-10 05:45:11125semak imbas

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

Setakat ini saya telah dapat melaksanakan kebenaran telegram sepenuhnya, tetapi tidak dalam bahasa yang anda minta - PHP, saya menggunakan vb.Net. Walau bagaimanapun, saya percaya logik yang sama harus digunakan.


Membuat Kunci Keizinan Telegram


API Telegram bukan perkara biasa di taman. Mempelajari kod src sedia ada boleh menjadi agak menakutkan (IMHO). Oleh itu pendekatan saya adalah untuk mengkaji dokumentasi API dalam talian dan melaksanakan sample-auth_key yang digariskan dalam pautan di bawah.


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


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


Apa pendekatan ini akan berikan kepada anda ialah pemahaman dan pengenalan yang lebih baik kepada primitif yang digunakan di seluruh API Telegram, dan mungkin membantu anda mula mengatur set fungsi dan rutin anda sendiri untuk mengendalikan yang anda perlukan untuk langkah seterusnya - melaksanakan ciri API yang lain, kerana menjana AuthKey hanyalah permulaan.


Langkah 1


Semua Komunikasi adalah melalui TCP - Setelah anda memperoleh api_id unik (https://core.telegram.org/api/obtaining_api_id#obtaining-api-id) anda akan mendapati IP berikut diiklankan untuk digunakan dalam ujian: 149.154.167.40:433 Api_id tidak diperlukan pada ketika ini untuk menghasilkan AuthKey


Sediakan kaedah pilihan anda untuk Hantar/Terima TCP Gelung pemprosesan

🎜>

apa yang saya ada ialah peribadi SendData yang hanya menghantar bait ke soket langsung yang disambungkan ke alamat IP yang diberikan di atas


<br><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

Private Sub ReadData(Pilihan tunggu Sebagai 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
Tamatkan Sub

Persendirian Sub IO_Handler(pengirim Sebagai Objek, 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
End Sub

Sub HandleData(e As SocketAsyncEventArgs)

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

Tamatkan Sub

Akhir sekali untuk langkah ini, kami memerlukan kaedah TcpPack() yang membantu kami mengisi data kami dalam format yang Telegram jangkakan - lihat kod di bawah dengan ulasan


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

Tamat Fungsi

LANGKAH 2


Dengan persediaan rutin hantar/terima TCP asas, kita boleh mula menyediakan paket data untuk dihantar ke telegram dan mempunyai sub rutin untuk mengendalikan respons khusus yang diterima - ProcessResponse(data)


Apa yang perlu kita fahami seterusnya ialah hakikat bahawa Telegram mengendalikan 2 kategori luas mesej -


< p>Tidak disulitkan - https://core.telegram.org/mtproto/description#unencrypted-message


Ini adalah mesej teks biasa dengan auth_key_id =0 menjana AuthKey menggunakan jenis mesej ini sepanjang

Disulitkan - https://core.telegram.org/mtproto/description#encrypted-message-encrypted-data


Semua komunikasi lanjut dengan Pelayan Telegram akan melalui mesej yang disulitkan


Saya memilih untuk mempunyai dua kelas untuk merangkum kedua-dua jenis mesej. Saya kemudiannya boleh mempunyai dua kaedah Send(m) yang mengendalikan setiap jenis


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

Spribadi 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()

Tamat Sub


Buat masa ini hanya UnencryptedMessage diperlukan


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

Atas ialah kandungan terperinci Bagaimana untuk Menjana Kunci Kebenaran Telegram dalam VB.Net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn