Que algoritmo utilizas para generar el hash, es propio?, a mi se me ocurrió una idea similar pero usando algoritmo existentes.
Dulces Lunas!¡.
El algoritmo es propio, no es demasiado complejo:
Const Signature As String = "Put_Here_Your_AppID" 'Write here your unique Application ID
Const Lenght As Integer = 20 'Lenght of your final hash
Dim Hash As Long
Dim SignatureHash As String
Private Sub Form_Load()
p(0).BackColor = vbWhite
x = 100
Y = 200
For i = 1 To 300
Load p(i)
p(i).Top = Y
p(i).Left = x
p(i).Visible = True
p(i).Tag = 0
x = x + p(i).Width
If i Mod 25 = 0 Then
Y = Y + p(i).Height
x = 100
End If
Next
For i = 1 To Len(Signature)
M = M & CStr(Asc(Mid(Signature, i, 1)) Xor i)
Next
SignatureHash = M
End Sub
Private Sub p_DblClick(Index As Integer)
For i = 1 To 300
p(i).Tag = 0
p(i).BackColor = vbWhite
Next
Text1.Text = ""
End Sub
Private Sub p_MouseMove(Index As Integer, Button As Integer, Shift As Integer, x As Single, Y As Single)
Select Case p(Index).BackColor
Case vbWhite
p(Index).BackColor = RGB(25, 25, 25)
p(Index).Tag = 2
Case RGB(25, 25, 25)
p(Index).BackColor = RGB(75, 75, 75)
p(Index).Tag = 4
Case RGB(75, 75, 75)
p(Index).BackColor = RGB(150, 150, 150)
p(Index).Tag = 8
Case RGB(150, 150, 150)
p(Index).BackColor = RGB(210, 210, 210)
p(Index).Tag = 16
Case RGB(210, 210, 210)
p(Index).BackColor = vbWhite
p(Index).Tag = 32
End Select
Hash = 0
For i = 1 To 300
Hash = Hash + p(i).Tag * i
Next
For i = 1 To Len(SignatureHash)
If Hash Mod 3 = 0 Then
M = LCase(M) & Hex(Mid(SignatureHash, i, 1) & Int(Hash / i))
Else
M = UCase(M) & Hex(Mid(SignatureHash, i, 1) & Int(Hash / i))
End If
Next
Text1.Text = Left(M, Lenght)
End Sub
Editas las constantes, la primera es una string que deberás inventarte, eso te garantiza ID's únicos para tu aplicación. La segunda constante es la longitud del hash generado, por ejemplo 20.
Cada vez que pasamos el mouse por un pixel, cambia su color y asignamos un nuevo valor para su propiedad TAG (2, 4, 8, 16 o 32). Al finalizar, un bucle suma todos los TAG y los multiplica por el contador actual (de 1 hasta 300). Dicho resultado se finaliza con un segundo bucle en primenumber=3 que genera un Hash de tipo hexadecimal utilizando un XOR con la Signature String constante del inicio.
Un saludo