2009-09-17 9 views

Répondre

0

compris cela sur mon propre

Imports System.Net

Importations tb2CoreLib

importations Microsoft.Xml.Schema. LINQ

importations System.Security.Cryptography

importations facebook.Uti lité

Importations Microsoft.Xml

Imports System.Xml

Imports System.Web

Classe publique FacebookConnect

Fonction publique EmailHash (e-mail ByVal 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 

fin de classe

Imports System

Importations System.Security.Cryptography

Classe publique 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 

End Class

1

Connect.registerUsers utilise, I believe simplement normal MD5 hash comme implémenté dans le runtime .NET.

La page de documentation MD5 inclut même un exemple de code:

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 

Cependant, il y a une .NET client library pour Facebook, pourquoi ne pas l'utiliser?

Duh. La bibliothèque .NET ne prend pas en charge pour Connect (encore)

Questions connexes