2008-11-28 13 views
5

In meiner Anwendung muss ich eine Zeichenfolge Hash, bevor ich es in eine Textdatei speichern. Weiß jemand, wie man das macht?Visual Basic 6.0 Hash-Funktion

+0

Sie sollten angeben, was der Zweck des Hashing ist, wie ein Kennwort zu verbergen, Suche, etc. – PhiLho

Antwort

0

Sie können mit CriptoASP versuchen. Es macht nichts mit dem 'ASP' im Namen, es ist eine ActiveX DLL, die Sie von VB6 instanziieren können. Es bietet Methoden zum Generieren von Zufallszahlen, Hashes mit MD2, MD4, MD5 und SHA und eine Art von Verschlüsselung/Entschlüsselung.

Sie können es herunterladen von CriptoASP

Es tut mir leid, Web-Sprache in Spanisch, aber ich glaube, Sie mit den Beispielen an der Unterseite des Doc. for CriptoASP die sehr einfache Bedienung der COM undertand kann nur Server ändern .CreateObject mit dem neuen Objektsatz in VB6.

Sagen Sie mir, wenn Sie eine Übersetzung der Beispiele oder Dokumentation wollen.

Um es in eine Textdatei zu speichern, können Sie FSO (File System Object) verwenden.

2

Zu welchem ​​Zweck verwenden Sie den Hash? Dies ist wichtig, da einige Hash-Algorithmen wie MD5 für einige Zwecke geeignet sind, andere jedoch nicht.

Dieser Link zeigt eine VB6 implementation of MD5.

+0

Der Link ist nicht mehr gültig. Gebrochen. @RoadWarrior – Ahmad

+0

@Ahmad, ich habe den Link behoben. – RoadWarrior

0

Ich habe sehr gute Ergebnisse mit diesem hatte, aber die Umsetzung ist c

SDBM

dieser Algorithmus für SDBM erstellt wurde (eine Public-Domain-Neuimplementierung von ndbm) Datenbankbibliothek. Es hat sich gezeigt, dass es beim Scrappen von Bits gut funktioniert, was eine bessere Verteilung der Schlüssel und weniger Splits bewirkt. es ist auch eine gute allgemeine Hash-Funktion mit guter Verteilung. die tatsächliche Funktion ist Hash (i) = Hash (i - 1) * 65599 + str [i]; Was unten enthalten ist, ist die schnellere Version in Gawk verwendet. [Es gibt sogar eine schnellere, duff-device-Version] die magische Konstante 65599 wurde aus dem Nichts ausgesucht, während mit verschiedenen Konstanten experimentiert, und erweist sich als eine Primzahl. Dies ist einer der in berkeley db (siehe sleepycat) und anderswo verwendeten Algorithmen.

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

Um Portierung auf vb, geht die Berechnung so etwas wie dieses. Im Grunde geht es durch die Zeichen der Zeichenfolge von links nach rechts, den Hash als

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

Der ganze Punkt des shl (<<) ist es zu vermeiden, die Multiplikation mit 65599 zu verwenden, was relativ langsam ist. Der VB-Port hat ZWEI Multiplikationen. Es wäre schneller, dies zu tun: newHash = das Zeichen (c) + (previousHashValue * 65599) – Steve

2

Beispiel der Verwendung von CAPICOM einen Hash zu erhalten

hinzufügen Capicom.dll als Projektverweis

Anwendungen DIM Taste As String DIM sValue As String

Dim sEncrypedValue als String

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

Mit oCAP. .Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS .Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4
.SetSecret Schlüssel .content = sValue Ende mit

sEncrypedValue = objCAP.Encrypt (CAPICOM_ENCODE_BASE64)

zu entschlüsseln: oCAP.SetSecret Schlüssel oCAP.Content = sEncrypedValue sValue = oCAP.Decrypt (CAPICOM_ENCODE_BASE64)

0

Sie es in einer C# .net dl implementieren könnte l mit SHA128Managed

1

(kommentiert erfordert 50 rep)

Der Link, der Joel ist gut zur Verfügung gestellt, aber beachten Sie, dass Sie den Startwert der Norm ändern müssen für sie die gleiche CRC32 wie jeder produzieren sonst :

Optional ByVal Seed As Long = & HEDB88320

Hoffnung, dass jemand anderes 30 Minuten Arbeit spart!