Hash è un termine inglese (to hash = sminuzzare) che designa una cosa fatta a fettine.

Nel linguaggio matematico e informatico, l’hash è una funzione che mappa una stringa di lunghezza arbitraria in una stringa di lunghezza minore. Esistono numerosi algoritmi che realizzano funzioni hash con particolari proprietà che dipendono dall’applicazione.

Proponiamo qui oggi una funzioncina semplice e leggera per ricavare da una stringa una sua rappresentazione “hashata”. In particolare secondo l’algoritmo “hash4”

L’algoritmo utilizzato non è invertibile, ossia non è possibile ricostruire la stringa originale a partire dalla stringa che viene restituita in output (è quindi una funzione unidirezionale); uno degli utilizzi potrebbe essere rappresentato in crittografia per verificare l’integrità del messaggio originale (si confrontano gli hash di due stringhe, se coincidono allora rappresentano lo stesso oggetto). Un utilizzo più semplice è costituito dall’assegnazione a un utente di un codice personale per identificarlo in un database.

Generalmente il prodotto di una codifica hash è una sequenza di codici esadecimali.

La funzione VBA proposta è solo uno tra i tanti esempi facilmente reperibili.

Function strcode(s As String, Optional reduce As Boolean = False) As String
'costruisce un hash4 della stringa in argomento
'se esiste spazio, spezza la stringa in tokens e costruisce l'hash4 dei primi due tokens
  Dim v As Variant, u As Byte, i As Integer
  Dim t As String
  If InStr(s, " ") = 0 Then s = s & " "
  v = Split(s, " ")
  u = UBound(v): If u > 1 Then u = 1
  For i = 0 To u
    strcode = strcode & hash4(CStr(v(i)))
  Next
  If reduce Then
    For i = 1 To Len(strcode) Step 2
      t = t & Chr("&H" & Mid(strcode, i, 2))
    Next
    strcode = t
  End If
End Function
Private Function hash4(s As String)
  Dim x As Long
  Dim mask As Integer, i As Integer, j As Integer
  Dim crc As Integer
  crc = -1 '&HFFFF
  For i = 1 To Len(s)
    crc = crc Xor Asc(Mid(s, i, 1))
    For j = 1 To 8
      mask = 0
      If crc / 2 <> Int(crc / 2) Then mask = &HA001
      crc = (Int(crc / 2) And &H7FFF) Xor mask
    Next j
  Next i
  hash4 = String(4 - Len(Hex(crc)), "0") & Hex(crc)
End Function

L’utilizzo è piuttosto semplice: basta copiare e incollare entrambe le routines in un modulo e chiamare la sub che genera il codice (“strcode”) passando in argomento la stringa da codificare. Questa versione genera un codice hash4 per le prime due parole della stringa originale (le parole sono separate da uno spazio). La funzione distingue tra maiuscole e minuscole.

Opzionalmente si può specificare il valore True o False per il parametro Reduce, che è False per impostazione predefinita. Se True, la stringa codificata viene ulteriormente compattata.

Esempio:

strcode(“Excel VBA my love”) –> “0C2A4061”

strcode(“Excel Vba my love”)  –> “0C2A5879”

Il cuore è la funzione hash4 che se resa non Private può benissimo operare in modo indipendente (si chiama hash4 perchè restituisce un valore esadecimale di 4 byte). Infatti nella versione a due parole proposta viene effettuata una codifica hash4 separata e poi i due tokens (pezzi) vengono riuniti insieme per produrre il risultato finale.

 

Convertire una stringa in codice hash4
Tag:         

Convertire una stringa in codice hash4

Login Registrati
Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
  • Autore
    Articoli
  • #6481 Risposta

    vecchio frac
    Moderatore
      16 pts

      Hash è un termine inglese (to hash = sminuzzare) che designa una cosa fatta a fettine. Nel linguaggio matematico e informatico, l'hash è una funzione che mappa una stringa di lunghezza arbitraria in una stringa di lunghezza minore.

      Esistono numerosi algoritmi che realizzano funzioni hash con particolari proprietà che dipendono dall'applicazione. Proponiamo qui oggi una funzioncina semplice e leggera...

      Leggi tutto al seguente link: https://www.excelvba.it/forumexcel/convertire-una-stringa-in-codice-hash4/

      #6486 Risposta

      admin
      Amministratore del forum

        Ottimo articolo  😉 

        #6501 Risposta

        vecchio frac
        Moderatore
          16 pts

          La discussione è aperta per suggerimenti e migliorie.

          Chiunque abbia argomenti da proporre, articoli da veder pubblicati, temi da affrontare, comunichi pure con una mail alla Redazione che il nostro Admin Onofrio ci mette a disposizione.

          Gli articoli verranno visionati e una volta approvati verranno pubblicati sia nel blog di Excel VBA che sul forum.

        Login Registrati
        Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
        Rispondi a: Convertire una stringa in codice hash4
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni:



        vecchio frac - 593 risposte

        albatros54
        albatros54 - 507 risposte

        Marius44
        Marius44 - 270 risposte

        patel
        patel - 257 risposte

        Luca73
        Luca73 - 194 risposte

        ChatBox per richiedere velocemente assistenza a semplici problematiche

        Devi fare il login per scrivere nella chat

        0
        1