Md5 per VBA


#21
ich versuche es mal, zunächst die Zeile zu löschen. Ich habe keinen Weg zum Importieren gefunden. Nur die Anleitung zum eintragen in das Fenster. Hab alles auch versch. Seiten zusammengesucht. Dann kanns passieren, dass etwas nicht passt.

Schließen ließ sich die Datei eben nicht mehr ohne Widerstand.

so, habe nun einmal importiert und in der anderen Datei die erste Zeile gelöscht. Zwei Dateien, gleiches Ergebnis: #NAME?
 
#23
genau wie eben geschrieben:

im Arbeitsblatt folgendes in eine Zelle geschrieben: =MD5_string(c4)
(in c4 steht das Wort das umgewandelt werden soll)

Ich habe jetzt lediglich zwei Dateien:
In der ersten hatte ich den Code eingefügt und nach deiner Anweisung die erste Zeile gelöscht.

In der zweiten Datei habe ich die .bas importiert. Das Ergebnis ist das gleiche.

Doc hat oben bereits geschrieben, dass in dem Code die Progressbar das Problem ist. Hier würde ich gerne wissen, was ich löschen oder auskommentieren muss. So scheint es bei den anderen Nutzern bereits zu funktionieren.
 
#25
natürlich nicht beides. Ich schrieb ja, ich habe zwei verschiedene Testdateien angelegt. Aber keine der beiden funktioniert. Vermutlich wegen den in Post 3 oder 4 beschriebenen Fehler im Code, den ich nicht selbst beheben kann.
 

Yaslaw

n/a
Moderator
#26
" Fehler beim Kompilieren: Variable nicht definiert "

Code:
.....
    state(3) = &H10325476
    index = 0
    For i = 0 To nBlks - 1
        Call md5_transform(state, abMessage, index)
        index = index + MD5_BLK_LEN
        pPercent = Int(i / (nBlks - 1) * 60)
-->        frmMain.pb1.value = 40 + pPercent
    Next
    partLen = mLen Mod MD5_BLK_LEN
    index = nBlks * MD5_BLK_LEN
    For i = 0 To partLen - 1
.....
Bei dieser Zeileam Zeilenanfang ein ' setzen. Oder die ganze Zeile löschen
 
#27
Es funktioniert nicht. Muss man da vlt sonst noch etwas tun? Mein Arbeitsblatt sieht so aus:


Der Code nach dem Auskomentieren nun so:


Es zeigt sich keine Veränderung.

Muss man außer dem Eintrag im Datenblatt und des Einfügens des Codes noch etwas tun?

Meine eigentliche Datei ist eine Adressdatenbank mit 8000 Datensätzen, dort muss eine Spalte in md5 umgewandelt werden. Gäbe es hierfür noch einen anderen Weg?
 
#28
Hallo in die Runde,
zunächst einmal vielen Dank für die MD5-Implementierung, die tut ihre Dienste einwandfrei!
Probleme tauchen bei mir allerdings auf, wenn ich zwei zuvor erstellte Hashwerte in einem String verknüpfe und für diesen wiederum einen Hashwert erstellen möchte.
Beim Ausführen des Makros erscheint die "Laufzeitfehler 6: Überlauf"- Meldung und die Kennzeichnung der folgenden Code-Zeile:

upload_2016-10-27_11-48-33.png

Kann ich dieses Problem dadurch lösen, dass ich für eine der in der Implementierung genutzten Variablen einen größeren Variablentyp verwende?

Vorab vielen Dank für Eure Hilfe!
 
#29
Hi

ich bin mir zwar nicht ganz sicher, wie da ein Überlauf passiert, aber:
Die drei Zeilen mit "pPercent" sind für MD5 selber nicht wichtig und könnten alle rausgenommen werden.
Ist nur eine Art Fortschrittsanzeige.
 
#30
Hi,

Ich habe das Modul in MS Access2016 eingesetzt, bis auf die insgesamt 5 Zeilen, die raus müssen, funktioniert es sauber. (y)(y)(y)(y)
Man muss eben nur wissen, was man tut - VBA ist und bleibt nunmal eine Programmiersprache und gerade beim Programmieren gilt das besonders.

Viele Grüße
Tom
 
#31
Hi,

ich nochmal.
Ich baue privat eine Anwendung für meinen Verein, was dank der DSGVO notwendig wurde.
Die Anwendung hat aufgrund eines Rechtemanagements einen eigenen Login, der MD5-Hashes als kryptografisches Verfahren nutzt.

Die Anwendung soll später innerhalb einer Access2016 Laufzeitumgebung arbeiten, damit die Nutzer kein Access kaufen müssen. Diese Laufzeitumgebung gibt es in 32bit und 64bit.

Dazu habe ich heute auf einem zweiten Rechner (der nie zuvor Access2016 gesehen hat) einige kurze Tests gefahren, ob das alles so läuft wie gewünscht.
Bei der 64bit-Variante funktioniert der Login problemlos (war zu erwarten, denn die Anwendung ist unter 64bit Access2016 gebaut).

Danach habe ich die 64bit-Variante deinstalliert und anschließend die 32bit-Variante installiert.
Hier schlug der Login dann fehl.

Ich habe die vom 64bit-Acess2016 gelieferten Ergebnisse nochmals gegen Built-In-Implementationen (z.B. in PHP) getestet und der Code liefert korrekte Werte, also liegt das Problem meiner Ansicht nach in der 32bit-Laufzeitumgebung. Und vielleicht sogar noch in Kombination mit der eingesetzten Hardware...
... kann also gut sein, daß bei anderen die 32bit-Version problemlos läuft ...

Meinen Entwicklungsrechner hatte ich (natürlich) nicht dabei, so daß ich keinerlei Debugging vornehmen konnte.
Ich vermute die problematische Stelle bei den Funktionen UnsignedToLong() und LongToUnsigned(), da diese als Ersatz für einen "echten" unsigned-Datentypen den Datentyp Double (Fließkommazahl mit doppelter Genauigkeit) benutzen. Da könnte es bei einer 32bit-Implementation theoretisch schon zu Abweichungen gegenüber einer 64bit-Implementation kommen, die sich dann kombinieren und letztendlich zu Rundungsfehlern führen. Schließlich wird bei einem Double der Wert nicht quasi as-is als ein Bitfeld, sondern in Mantisse und Exponent getrennt abgelegt und später wieder rekombiniert.

Bevor ich da jetzt anfange, zu debuggen, was VBA in einer 32bit-Laufzeitumgebung mit dem Modul tatsächlich veranstaltet, frage ich mal kurz in die Runde, ob da schon etwas bekannt ist, was noch nicht den Weg in diesen Thread gefunden hat.

Ich arbeite schon etwas länger als Entwickler (und musste z.B. 2004 PunnyCode für Umlautdomains in Delphi implemetieren), von daher würde es mich nicht wundern, wenn die Addition eines sehr kleinen Terms (z.B. 0,0001) an der/den richtigen Stelle(\n) das Problem beheben würde.

Viele Grüße
Tom
 
#32
Hallo in die Runde,
Beim Ausführen des Makros erscheint die "Laufzeitfehler 6: Überlauf"- Meldung und die Kennzeichnung der folgenden Code-Zeile:

Anhang anzeigen 64798

Kann ich dieses Problem dadurch lösen, dass ich für eine der in der Implementierung genutzten Variablen einen größeren Variablentyp verwende?

Vorab vielen Dank für Eure Hilfe!
Ist vielleicht etwas spät...

Ein größerer Datentyp hilft hier nicht, denn das Problem liegt woanders: wenn nBlks den Wert 1 hat, wird durch 0 (kullernull) geteilt, das einen Überlauffehler verursacht, wenn die Division durch 0 nicht von einer eigenen Exception abgehandelt wird.
 

Neue Beiträge