programacion - tabla hash
Visual Basic 6.0 funciĆ³n hash (7)
Ejemplo de uso de CAPICOM para obtener un hash
Agregue CAPICOM.DLL como referencia del proyecto
utiliza la clave DIM As String DIM sValue As String
Dim sEncrypedValue como cadena
Dim oCAP como CAPICOM.EncryptedData Establecido oCAP = Nuevo CAPICOM.EncryptedData
Con oCAP. .Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS .Agorgorm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4
.SetSecret key .Content = sValue finaliza con
sEncrypedValue = objCAP.Encrypt (CAPICOM_ENCODE_BASE64)
Para descifrar: clave oCAP.SetSecret oCAP.Content = sEncrypedValue sValue = oCAP.Decrypt (CAPICOM_ENCODE_BASE64)
En mi aplicación necesito hacer una cadena antes de guardarla en un archivo de texto. ¿Alguien sabe cómo hacer eso?
Puedes probar con CriptoASP. No te preocupes por el ''ASP'' en el nombre, es un archivo DLL ActiveX que puedes instanciar desde VB6. Proporciona métodos para generar números aleatorios, hash con MD2, MD4, MD5 y SHA y algún tipo de cifrado / descifrado.
Puedes descargarlo desde CriptoASP
Lo siento, el idioma de la web está en español, pero creo que puede entender el uso muy fácil de COM con los ejemplos en la parte inferior del Doc. para CriptoASP , simplemente cambie Server.CreateObject con la nueva oración objeto en VB6.
Dime si quieres una traducción de los ejemplos o la documentación.
Para guardarlo en un archivo de texto, puede usar FSO (File System Object).
He tenido muy buenos resultados con este, pero la implementación es c
sdbm
este algoritmo se creó para la biblioteca de base de datos sdbm (una reimplementación de dominio público de ndbm). se encontró que funcionaba bien al mezclar bits, causando una mejor distribución de las claves y menos divisiones. también es una buena función hash general con buena distribución. la función real es hash (i) = hash (i - 1) * 65599 + str [i]; lo que se incluye a continuación es la versión más rápida utilizada en gawk. [hay incluso una versión más rápida, duff-device] la constante mágica 65599 fue seleccionada de la nada mientras experimentaba con diferentes constantes, y resulta ser una de las principales. este es uno de los algoritmos utilizados en berkeley db (ver sleepycat) y en otros lugares.
static unsigned long
sdbm(str)
unsigned char *str;
{
unsigned long hash = 0;
int c;
while (c = *str++)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}
Para convertirlo a vb, el cálculo es algo como esto. Básicamente recorre los caracteres de la cadena de izquierda a derecha, calculando el hash como
newHash = the character (c) + (previousHashValue * 2^6) +
(previousHashValue * 2^16) -
previousHashValue**
previousHashValue = newHash
Aquí hay una función hash CRC32:
Podrías implementarlo en un dll C # .net usando SHA128Managed
(comentar requiere 50 rep)
El enlace que proporcionó Joel es bueno, pero tenga en cuenta que tendrá que cambiar el valor inicial al estándar para que produzca el mismo CRC32 que todos los demás:
Semilla de ByVal opcional como larga = & HEDB88320
¡Espero que le ahorre a alguien más 30 minutos de trabajo!
¿Con qué propósito estás usando el hash? Esto es importante porque algunos algoritmos hash como MD5 son adecuados para algunos propósitos, pero no para otros.
Este enlace muestra una implementación VB6 de MD5 .