2008-11-28 4 views
5

Dans mon application, je dois hacher une chaîne avant de l'enregistrer dans un fichier texte. Est-ce que quelqu'un sait comment faire ça?Fonction de hachage Visual basic 6.0

+0

Vous devez indiquer quel est le but du hachage, comme masquer un mot de passe, autoriser la recherche, etc. – PhiLho

Répondre

0

Vous pouvez essayer avec CriptoASP. Ne vous occupez pas de 'ASP' dans le nom, c'est une DLL ActiveX que vous pouvez instancier à partir de VB6. Il fournit des méthodes pour générer des nombres aléatoires, des hachages avec MD2, MD4, MD5 et SHA et une sorte de cryptage/décryptage.

Vous pouvez le télécharger à partir CriptoASP

Je suis désolé, la langue du web est en espagnol, mais je pense que vous pouvez undertand l'utilisation très facile du COM avec les exemples en bas de Doc. for CriptoASP, il suffit de changer serveur .CreateObject avec la nouvelle phrase d'objet dans VB6. Dites-moi si vous voulez une traduction des exemples ou de la documentation. Pour l'enregistrer dans un fichier texte, vous pouvez utiliser FSO (File System Object).

2

Dans quel but utilisez-vous le hachage? Cela est important car certains algorithmes de hachage tels que MD5 conviennent à certaines fins, mais pas à d'autres.

Ce lien montre un VB6 implementation of MD5.

+0

Le lien n'est plus valide. Cassé. @RoadWarrior – Ahmad

+0

@Ahmad, j'ai corrigé le lien. – RoadWarrior

0

J'ai eu de très bons résultats avec celui-ci, mais la mise en œuvre est c

sdbm

cet algorithme a été créé pour sdbm (un reimplementation domaine public de ndbm) bibliothèque de base de données. il a été trouvé à bien faire dans les bits de brouillage, provoquant une meilleure distribution des clés et moins de divisions. il se trouve aussi être une bonne fonction générale de hachage avec une bonne distribution. la fonction réelle est hash (i) = hash (i - 1) * 65599 + str [i]; ce qui est inclus ci-dessous est la version plus rapide utilisée dans gawk. [Il existe même une version plus rapide, duff-device], la constante magique 65599 a été choisie à partir de rien en expérimentant avec différentes constantes, et s'avère être une prime. c'est l'un des algorithmes utilisés dans berkeley db (voir sleepycat) et ailleurs.

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; 
} 

Pour le port à Vb, le calcul va quelque chose comme ça. Fondamentalement, il marche à travers les personnages de la chaîne de gauche à droite, le calcul du hachage comme

newHash = the character (c) + (previousHashValue * 2^6) + 
           (previousHashValue * 2^16) - 
           previousHashValue** 
previousHashValue = newHash 
+0

Tout le point de la shl (<<) est d'éviter d'utiliser multiplier par 65599 qui est relativement lent. Le port VB a deux multiplications. Ce serait plus rapide de le faire: newHash = le caractère (c) + (previousHashValue * 65599) – Steve

2

Exemple d'utilisation CAPICOM pour obtenir un hachage

Ajouter capicom.dll comme référence du projet

utilisations DIM clé As String sValue As String DIM

Dim sEncrypedValue as String

Dim OCAP Comme CAPICOM.EncryptedData Set OCAP = New CAPICOM.EncryptedData

Avec oCAP. .Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS .Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4
.SetSecret clé .Contenu = sValue fin avec

sEncrypedValue = objCAP.Encrypt (CAPICOM_ENCODE_BASE64)

pour décrypter: oCAP.SetSecret clé oCAP.Content = sEncrypedValue sValue = oCAP.Decrypt (CAPICOM_ENCODE_BASE64)

0

Vous pouvez la mettre en œuvre dans un C# .net dl l en utilisant SHA128Managed

1

(commentant nécessite rep 50)

Le lien que Joel fourni est bon, mais notez que vous aurez besoin de changer la valeur de la graine à la norme de produire comme tout le monde le même CRC32 :

Seed en option ByVal As long = & HEDB88320

espoir qui sauve quelqu'un d'autre 30 minutes de travail!