Forum | | | | Georg Teles | allô Allerseits, hab mich ici depuis qui Anmeldung malheureusement nie geblickt, mais hobbymäßig quand même quelques Programme geschrieben (peut-être Poste je qui chez Gelegenheit la fois), nu hab je une Frage sais quelqu'un comment qui Funktion MapFileAndCheckSum oui c'est ca funktioniert ? KompilierenMarqueSéparation ... par essayer habe je une Code geschrieben, mais chez gewissen Größen rechnet il mir qui "Checksumme" faux um: (dans Byte) 8, 12, 16, 20, 28, 32, ... 722 plus hab je pas ausprobiert ...
jusqu'à dahin hab je es avec Textdateien probiert, mais aussi avec anderen Dateitypen, EXE JPG et dabei hat il aussi chez einigen Fichiers richtig, chez anderen faux gerechnet ...
... qui Grund wozu ch cela brauche ist, dass je anstatt chaque la fois qui Dossier trop écrivons um cet avec qui dessus genannten Funktion abzurufen, cet Funktion mittels Bereich interne berechnen laisser voudrais.
ici naturellement qui ganze Code inclusivement la fenêtre Drag & Drop et alles Schnickschnack, qui Funktion, qui "MapFileAndChecksum" ersetzen soll, heisst "CR2", qui Werte volonté dans qui liste sous "meine CRC" aufgelistet, qui avec "MapFileCheckSum" sous "CheckSum" naturellement KompilierenMarqueSéparation $H windows.ph
'Set("ErrorLevel", 0)
Def DragAcceptFiles(2) !"SHELL32","DragAcceptFiles"
Def DragFinish(1) !"SHELL32","DragFinish"
Def DragQueryFile(4) !"SHELL32","DragQueryFileA"
DEF MapFileAndCheckSum(3) ! "Imagehlp","MapFileAndCheckSumA"
Declare HeadSum&,CheckSum&
Declare E%, PFn#, anz&, zah&, B01%, lstB&, winico&, lst$
WinMain(510,260)
Cls ~Getsyscolor(15)
Objects()
Activities()
Proc WinMain
Parameters x&,y&
Windowtitle "Checksum - Drag & Drop"
Windowstyle 8+16+512
Window ((%MaxX/2)-(x&/2)),((%MaxY/2)-(y&/2))-x&,y&
winico& = Create("hIcon",Par$(0),0)
SendMessage(%hwnd,$80,1,winico&)
~SetWindowLong(%hwnd,-16,$92CA0000)
PopUp "&Datei"
AppendMenu 100,"Öffne Liste"
AppendMenu 101,"Speichere Liste"
Separator
AppendMenu 102,"Beenden"
PopUp "&Liste"
AppendMenu 200,"Auswahl löschen"
AppendMenu 201,"Löschen"
Endproc
Proc Objects
lstB& = Create("GridBox",%HWnd,"Datei;0;115;Größe in Byte;1;100;CheckSum;1;80;meine CRC;1;80;Vergleich;1;75",2,5,5,493,200)
DragAcceptFiles(%HWnd,1)
EndProc
Proc Activities
Usermessages 563
CheckList
Clear E%
WhileNot E%
Waitinput
If %Message = 563
Drag()
ElseIf %Key = 2
Inc E%
ElseIf MenuItem(100)
lst$ = LoadFile$("Öffne Datei:","Alle Dateien |*.*")
If %Button = 1
op_(lst$)
EndIf
ElseIf MenuItem(101)
sa_()
ElseIf MenuItem(102)
Inc E%
ElseIf MenuItem(200)
del_(GetCount(lstB&),1)
ElseIf MenuItem(201)
del_(GetCount(lstB&))
EndIf
CheckList()
Endwhile
DragAcceptFiles(%HWnd,0)
EndProc
Proc Drag
DIM PFn#,261
anz& = DragQueryFile(&UWParam,$FFFFFFFF,PFn#,261)
Clear zah&
While zah&<anz&
Clear PFn#
DragQueryFile(&UWParam,zah&,PFn#,261)
Ad_(String$(PFn#,0))
Inc zah&
EndWhile
Dispose PFn#
DragFinish(&UWParam)
EndProc
Proc op_
parameters file$, z$
Assign #1,file$
Reset #1
If %IOResult
Messagebox("Datei kann nicht gelesen werden!","Fehler",16)
Else
WhileNot EOF(#1)
Input #1, z$
AddString(lstB&,z$)
EndWhile
EndIf
Close #1
EndProc
Proc sa_
Parameters file$
file$ = $progdir+"list_"+Date$(3)+"_"+Left$(Time$(0),2)+"."+Right$(Time$(0),2)+"."+Left$(Time$(1),2)+".txt"
Assign #1,file$
OpenRw #1
Close #1
Assign #1,file$
Append #1
WhileLoop 0,GetCount(lstB&)-1
Print #1,GetText$(lstB&,&loop,0)+"|"+GetText$(lstB&,&loop,1)+"|"+GetText$(lstB&,&loop,2)+"|"+GetText$(lstB&,&loop,3)+"|"+GetText$(lstB&,&loop,4)
EndWhile
Close #1
EndProc
Proc Ad_
Parameters file$, size&, crc&, cr2&, msg$
crc& = crc(file$)
cr2& = cr2(file$)
size& = FileSize(file$)
file$ = SubStr$(file$,-1,"\\")
If crc& = cr2&
msg$ = "gleich"
Else
msg$ = "UNgleich"
EndIf
AddString(lstB&,file$+"|"+Str$(size&)+"|"+Str$(crc&)+"|"+Str$(cr2&)+"|"+msg$)
EndProc
Proc crc
Parameters File$
Clear Headsum&, Checksum&
MapFileAndCheckSum(Addr(File$),addr(Headsum&),addr(Checksum&))
Return Checksum&
EndProc
Proc cr2
Parameters File$,fs&,fs#,p%
Clear fs&,p%
fs& = Filesize(file$)
Dim fs#, fs&
Clear fs#
Assign #2,file$
Openrw #2
Blockread(#2,fs#,0,fs&)
Close #2
WhileLoop 0,fs&\2
p% = p%+word(fs#,&loop*2)
If p% >= 65535
p% = (p%-65535)
endif
EndWhile
p% = (p%+fs&)
Dispose fs#
Return p%
EndProc
proc del_
Parameters c&, p&
If p& = 1
WhileLoop 0,(c&-1)
If GetState(lstB&,(c&-1)-&loop) >= 2
DeleteString(lstB&,(c&-1)-&loop)
EndIf
EndWHile
Else
WhileLoop 0,(c&-1)
DeleteString(lstB&,(c&-1)-&loop)
EndWHile
EndIf
EndProc
Proc CheckList
If GetCount(lstB&)
EnableMenu 200,0
EnableMenu 201,0
Else
EnableMenu 200,1
EnableMenu >201,1
EndIf
ENDPROC
FIN
qui Funktion scheint pas simple trop son, mais plus que essayer peux je pas, im Netz steht aussi pas plus par-dessus. |
| | | | |
| | | allô Georg,
comment je es verstehe ca va tout autor de Exen ou bien DLL une Signatur trop erzeugen, plutôt pas de anderen Fichiers. MSDN
This function is used by any application that creates or modifies à executable image. Checksums sont required for kernel-mode drivers and some system DLL.
quoi oui c'est ca vouloir Du letztendlich erzielen? |
| | | | |
| | Georg Teles | Hi iF,
oui korrekt, es handelt sich um DLL et EXE, qui Checksumme wird sous Anderem im En-tête qui DLL / EXE "mitgeschleppt" et avant dem Effectuer wird qui Checksumme gebildet et qui verglichen, es wird alors geprüft, si cela Programme manipuliert wurde bzw si es überhaupt kompatibel ist am jeweiligen PC, es wäre oui unschön si es beim Effectuer des Programms zum Absturz des PC venons serait neech ...
früher hab je une Beitrag ici gelesen, es ging tout autor cet Funktion trop nutzen, um eigene Programme ou bien Fichiers trop protéger, ändert on wenigstens 1 Byte, so ändert sich qui komplette somme, et cet "Summe" ist cela quoi je mon, cet Funktion peux on scheinbar pour jeden Dateityp verwenden, seulement wird cet somme pas dans qui Dossier hinterlegt beispiel TXT, il peut profan dit qui somme de beliebigen Fichiers bilden.
quoi je erzielen voudrais erkläre je nochmal kurz: là qui CheckSum Funktion zwangsläufig une Pfad zur Dossier nécessaire voudrais je mittels qui eigenen Funktion cela gleiche Ergebnis erziehen, à einem Bereichs anstatt qui Dossier.
qui Funktion soll plan interne im Programme qui Checksumme bilden peut sans une Dossier trop écrivons ... je merke justement, dass es chez größeren Fichiers assez longtemps dauert jusqu'à je qui somme habe ... bof égal, j'ai avant une Archivierer trop écrivons, et cet Funktion veux je pour très kleine Bereiche verwenden, et zwar pour cela Mot de passe j'ai bereits 2 Archivierer geschrieben, einer avec Passwortschutz mais den speichert il malheureusement avec, et je veux cet Funktion irgendwie anstatt des Passwortes nutzen ...
je merke oui encore quoi, je coutume qui Funktion so oui garnicht comment Checksum, es funktioniert oui déjà comment je es veux, je teste la fois si il richtig kodiert et dekodiert ... |
| | | | |
| | | peut-être wäre quoi Findus ici posté hat hilfreich(il): [...] |
| | | | |
| | Georg Teles | plus beau Code, malheureusement arbeite je avec XProfan 10 et "encode64" gibt es là pas bof cela Beispiel zeigt Textverschlüsselung par Umsortieren, cela veux je oui vermeiden, passt déjà, je tüftel la fois plus ... |
| | | | |
| | | prends doch FreeProfan: [...] |
| | | | |
| | Georg Teles | merci iF, 64 Bit gibt es oui aussi Juhuuuu
hab maintenant qui Solution ... mon Funktion pouvoir oui c'est ca cela, quoi MapFileAndCheckSum aussi allerdings très lente, pour 1 MByte braucht cela Programme 22,875 Sekunden, mais c'est égal, je wende cela seulement pour kleine Bereiche à
Anscheinend rechnet qui Funktion den reste qui somme einer Dossier WORD pour WORD zusammen... BZW so comment je es verstanden habe, sobald qui somme des ersten WORD avec dem zweiten Max. erreicht ou bien größer ist (65535), wird es abgezogen, après wird qui reste qui bleibt avec dem prochain WORD addiert, pour chacun somme wird es wieder geprüft, si qui somme Max. erreicht ou bien größer ist, dans diesem le cas wird qui Wert wieder abgezogen usw ... KompilierenMarqueSéparation
Proc cr2
Parameters File$,fs&,fs#,p%,s%
Clear fs&,p%,s%
fs& = Filesize(file$)
Dim fs#, fs&
Clear fs#
Assign #2,file$
Openrw #2
Blockread(#2,fs#,0,fs&)
Close #2
If fs& MOD 2 = 0
s% = (fs&\2)-1
ElseIf fs& MOD 2 = 1
s% = (fs&\2)
EndIf
WhileLoop 0,s%
p% = p%+word(fs#,&loop*2)
If p% > 65534
p% = (p%-65535)
endif
EndWhile
p% = (p%+fs&)
Dispose fs#
Return p%
ENDPROC
|
| | | | |
| | | ensuite serait je qui Funktion (qui partie qui rechnet) dans un nProc saisir -
cela allez ensuite plus rapide comme qui Blitz. |
| | | | |
| | Georg Teles | allô, ensuite werde je la fois ici cela Thema auffrischen hab la fois pour meinen Archivierer un Passwortsystem überlegt, funktioniert dans etwa pour diesem Prinzip...
qui Lust zum Testen hat ^ ^ qui Test écrit seulement den Head meines Archivierers et Mot de passe + ouvrir et Passwortabfrage ... es wird une Dossier angelegt asd.tew
Télécharger |
| | | | |
| | | je suis pas sûrement, si cela Mot de passe sûrement hinterlegt wird.
si Je l' Bytewert eines individuel Passwortzeichens um 1 erhöhe ensuite sollte sich dans qui Dossier pas aussi simple seulement 1 Bytewert um 1 erhöhen. So sollte cela Mot de passe selbst garnicht dans qui Dossier stehen mais plutôt une Prüfsumme et seulement si Prüfsummen übereinstimmen ensuite stimmen qui Passworte überein. |
| | | | |
| | Georg Teles | bof c'est oui qui l'affaire, dass cela Passowrt garnicht avec drin ist peux fois le Dossier avec Notepad ouvrir et pour den Mot de passe chercher, là findest du rien.
habe presque oublier qc, un Leerzeichen sollte on pas benutzen, cela funktioniert ensuite la plus part du temps pas, je teste la fois plus ...
Éditer: drin steht aussi seulement qui Prüfsumme, allerdings ist vous avec allen Anderen Parametern verknüpft sodass si on versucht den En-tête trop manipuler, wird cela Programme puis aussi réagir, theoretisch hab je mir cela déjà überlegt |
| | | | |
|
répondreOptions du sujet | 11.032 Views |
Themeninformationencet Thema hat 2 participant: |