Facebook Connect Email хэш-функция для vb.net - PullRequest
0 голосов
/ 17 сентября 2009

Есть ли у кого-нибудь рабочий класс или функция для создания хэшированного электронного письма, которое отправляется на Facebook для регистрации адресов электронной почты с помощью connect.registerUsers?

Ответы [ 2 ]

1 голос
/ 24 сентября 2009

Connect.registerUsers использует, Я полагаю просто нормальный хэш MD5 , как это реализовано во время выполнения .NET.

Страница документации MD5 даже содержит пример кода:

Function getMd5Hash(ByVal input As String) As String
    ' Create a new instance of the MD5 object. '
    Dim md5Hasher As MD5 = MD5.Create()

    ' Convert the input string to a byte array and compute the hash. '
    Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))

    ' Create a new Stringbuilder to collect the bytes '
    ' and create a string. '
    Dim sBuilder As New StringBuilder()

    ' Loop through each byte of the hashed data '
    ' and format each one as a hexadecimal string. '
    For i As Integer = 0 To data.Length - 1
        sBuilder.Append(data(i).ToString("x2"))
    Next

    ' Return the hexadecimal string. '
    Return sBuilder.ToString()
End Function

Однако, в любом случае, есть клиентская библиотека .NET для Facebook, почему бы ее не использовать?

Дух. Библиотека .NET не поддерживает Connect (пока)

0 голосов
/ 27 октября 2009

понял это самостоятельно

Импорт System.Net

Импорт tb2CoreLib

Импортирует Microsoft.Xml.Schema.Linq

Imports System.Security.Cryptography

Импорт Facebook.Utility

Импорт Microsoft.Xml

Импорт System.Xml

Импорт System.Web

Открытый класс FacebookConnect

Открытая функция EmailHash (ByVal email As String) As String

    email = email.ToLower().Trim()
    Dim rawBytes As Byte() = System.Text.UTF8Encoding.UTF8.GetBytes(email)

    Dim crc As New Crc32()
    Dim crcResult As Byte() = crc.ComputeHash(rawBytes)
    Dim hexstring As String = Me.ToHexString(crcResult)

    Dim crcLResult As Long = Me.HexToDec(hexstring)

    Dim md5 As MD5 = New MD5CryptoServiceProvider()
    Dim md5Result As Byte() = md5.ComputeHash(rawBytes)
    Dim md5Data As String = Me.ToHexString(md5Result).ToLower()

    Return (crcLResult.ToString() & "_") + md5Data
End Function

конечный класс

Система импорта

Imports System.Security.Cryptography

Публичный класс Crc32

Inherits HashAlgorithm

Public Const DefaultPolynomial As UInt32 = &HEDB88320UI

Public Const DefaultSeed As UInt32 = &HFFFFFFFFUI

Private Shadows hash As UInt32
Private seed As UInt32
Private table As UInt32()
Private Shared defaultTable As UInt32()

Public Sub New()
    table = InitializeTable(DefaultPolynomial)
    seed = DefaultSeed
    Initialize()
End Sub

Public Sub New(ByVal polynomial As UInt32, ByVal seed As UInt32)
    table = InitializeTable(polynomial)
    Me.seed = seed
    Initialize()
End Sub

Public Overloads Overrides Sub Initialize()
    hash = seed
End Sub

Protected Overloads Overrides Sub HashCore(ByVal buffer As Byte(), ByVal start As Integer, ByVal length As Integer)
    hash = CalculateHash(table, hash, buffer, start, length)
End Sub

Protected Overloads Overrides Function HashFinal() As Byte()
    Dim hashBuffer As Byte() = UInt32ToBigEndianBytes(Not hash)
    Me.HashValue = hashBuffer
    Return hashBuffer
End Function

Public Overloads Overrides ReadOnly Property HashSize() As Integer
    Get
        Return 32
    End Get
End Property

Public Shared Function Compute(ByVal buffer As Byte()) As UInt32
    Return Not CalculateHash(InitializeTable(DefaultPolynomial), DefaultSeed, buffer, 0, buffer.Length)
End Function

Public Shared Function Compute(ByVal seed As UInt32, ByVal buffer As Byte()) As UInt32
    Return Not CalculateHash(InitializeTable(DefaultPolynomial), seed, buffer, 0, buffer.Length)
End Function

Public Shared Function Compute(ByVal polynomial As UInt32, ByVal seed As UInt32, ByVal buffer As Byte()) As UInt32
    Return Not CalculateHash(InitializeTable(polynomial), seed, buffer, 0, buffer.Length)
End Function

Private Shared Function InitializeTable(ByVal polynomial As UInt32) As UInt32()
    If polynomial = DefaultPolynomial AndAlso defaultTable IsNot Nothing Then
        Return defaultTable
    End If

    Dim createTable As UInt32() = New UInt32(255) {}
    For i As UInt32 = 0 To 255
        Dim entry As UInt32 = DirectCast(i, UInt32)
        For j As Integer = 0 To 7
            If (entry And 1) = 1 Then
                entry = (entry >> 1) Xor polynomial
            Else
                entry = entry >> 1
            End If
        Next
        createTable(i) = entry
    Next

    If polynomial = DefaultPolynomial Then
        defaultTable = createTable
    End If

    Return createTable
End Function

Private Shared Function CalculateHash(ByVal table As UInt32(), ByVal seed As UInt32, ByVal buffer As Byte(), ByVal start As Integer, ByVal size As Integer) As UInt32
    Dim crc As UInt32 = seed
    For i As Integer = start To size - 1
        crc = (crc >> 8) Xor table(buffer(i) Xor crc And &HFF)

    Next
    Return crc
End Function

Private Function UInt32ToBigEndianBytes(ByVal x As UInt32) As Byte()
    Return New Byte() {CByte(((x >> 24) And &HFF)), CByte(((x >> 16) And &HFF)), CByte(((x >> 8) And &HFF)), CByte((x And &HFF))}
End Function

Конечный класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...