Newsgroup: it.comp.lang.visual-basic
Titolo: md5 su file

ho scaricato una dll di un programmatore per calcolare la "firma digitale",
secondo l'algoritmo md5,
di alcuni aggetti. Uno di questi oggetti č un file , si tratta di calcolare
il valore cosě come si fa, ad esempio, per le distribuzioni di linux. Il
probl. č che dando come argomento l'indirizzo intero del file mi ritorna un
errore, evidentemente non era previsto un tipo di oggetto come questo, avete
per caso qualche soluzione o dll o... che mi possa aiutare ?
ciao grazie.

 per caso qualche soluzione o dll o...
Qui trovi l'algoritmo VBScript, gira già con VB ma ottimizzarlo tipizzando
le variabili è decisamente semplice.
http://www.freevbcode.com/ShowCode.Asp?ID=2366
Poi dovresti fornire info: che dll è?
La funzione che prototipo ha?
Che parametri accetta?
Cosa intendi per "indirizzo intero del file"?
Un pezzedo del codice incriminato?
Poi dici "evidentemente non era previsto un tipo di oggetto come questo", ma
sopra dicevi che tra i vari oggetti ci sono anche i file...
L'md5 si applica a stringhe... non ha molto senso parlare di file.
Ciao

 wrote in message news:kU879.217696
|
| > ho scaricato una dll di un programmatore per calcolare la "firma
| digitale",
| > secondo l'algoritmo md5,
|
| Credo che tu sia OT :)
non è OT perchè sto programmando in VB
|
| > di alcuni aggetti. Uno di questi oggetti è un file , si tratta di
| calcolare
| > il valore così come si fa, ad esempio, per le distribuzioni di linux. Il
| > probl. è che dando come argomento l'indirizzo intero del file mi ritorna
| un
| > errore, evidentemente non era previsto un tipo di oggetto come questo,
| avete
| > per caso qualche soluzione o dll o...
|
| Qui trovi l'algoritmo VBScript, gira già con VB ma ottimizzarlo tipizzando
| le variabili è decisamente semplice.
|
| 
http://www.freevbcode.com/ShowCode.Asp?ID=2366
|
| Poi dovresti fornire info: che dll è?
se vuoi te la mando è scritta in C ma è utilizzabile anche da VB
| La funzione che prototipo ha?
un prototipo ? in che senso
| Che parametri accetta?
purtroppo solo stringhe , l'esempio non parla di altro ma funziona in questo
modo : funz("stringa") e ritorna una stringa di 32 caratteri in formato
esadec. abc123bfb5 .... etc
| Cosa intendi per "indirizzo intero del file"?
il percorso del file , quindi non byval ma byref e qui casca l'asino
(c:\xxx\xxx.est)
| Un pezzedo del codice incriminato?
vedi sopra, non lo riporto perchè il codice è a posto
| Poi dici "evidentemente non era previsto un tipo di oggetto come questo",
ma
| sopra dicevi che tra i vari oggetti ci sono anche i file...
no intendevo che mi serviva per i file
| L'md5 si applica a stringhe... non ha molto senso parlare di file.
non è vero, se vai su 
www.linuxiso.org
 trovi un uso di md5 diverso che
calcola la firma digitale delle .iso che scarichi e che serve , dopo aver
scaricato, a confrontare i file scaricati con quelli originali, lo scopo è
quello di non avere file bacati o con backdoor etc.
|
in conclusione sapresti come fare ad ottenere quello che cerco?
| Ciao
|
ciao
|

 in conclusione sapresti come fare ad ottenere quello che cerco?
Io ti ho dato l'indirizzo da cui scaricare l'algoritmo MD5 già in VB, e
funzionante, poichè lo uso anch'io... più di così :)
Se invecie vuoi usare la tua DLL, beh... aiutami a capire.
Ciao
--
y = f(
http://neodatatype.interfree.it/index.html
)

| Ok, allora dammi qualche indizio :)
pronti !
|
| > | Poi dovresti fornire info: che dll è?
| > se vuoi te la mando è scritta in C ma è utilizzabile anche da VB
|
| No, ma... non c'è allegata nessuna documentazione?
ti faccio un estratto del codice che si usa così come l'ha scritta lui
Private Declare Function MakeMD5Digest _
    Lib "di_MD5DLL.dll" _
    (ByVal sData As String, ByVal sDigest As String) As Long
3. Call it in your code through this wrapper function:
Public Function MD5HexDigest(sData As String) As String
    Dim iRet As Long
    Dim sDigest As String
    ' Set sDigest to be 32 chars
    sDigest = String(32, " ")
    iRet = MakeMD5Digest(sData, sDigest)
    MD5HexDigest = Trim(sDigest)
End Function
4. For example:
 Debug.Print MD5HexDigest("abc")
 should return "900150983cd24fb0d6963f7d28e17f72"
naturalmente la dll viene piazzata si c:\windows\system
vedi c'è la stringa ma se scrivo
 Debug.Print MD5HexDigest(c:\documenti\esempio.txt)
da l'errore byref
saranno le barre ? lo estraggo da una listbox, devo girare le barre ? non
credo !
| > | Che parametri accetta?
| > purtroppo solo stringhe , l'esempio non parla di altro ma funziona in
| questo
| > modo : funz("stringa")
|
| Mannaggia, guarda se mi da' una riga di codice!   :)
| Non mi interessa come la vuoi usare tu, ma come è scritta, per capire come
| si dovrebbe usare.
l'ho usata nel modo tradizionale e va bene.
| Appunto!
| Sei sicuro che sia ByRef?
| In genere le stringhe in VB si passano proprio ByVal alle funzioni in Dll
C,
| ma dipende sempre dal prototipo.
purtoppo VB ritorna l'errore di passaggio byref non accettato
|
| E poi, sicuro che non voglia l'indirizzo nella forma c:\\xxx\\xxx.est o
| c:/xxx/xxx.est?
|
questo forse ... estraggo i file da una listbox
| > | Un pezzedo del codice incriminato?
| > vedi sopra, non lo riporto perchè il codice è a posto
|
| Allora perchè non va? >:)
boh !
|
|
| > | L'md5 si applica a stringhe... non ha molto senso parlare di file.
OK ma come fanno a calcolare l'md5 dei file su 
www.linuxiso.org
|
| uff... e secondo te l'MD5 come lo calcolano? sul nome del file?
| Leggono il contenuto come stringa (o buffer di byte se preferisci) e
| calcolano l'MD5 su quello.
ma su un file lungo 650 mb come fai ??????
|
| | Io ti ho dato l'indirizzo da cui scaricare l'algoritmo MD5 già in VB, e
| funzionante, poichè lo uso anch'io... più di così :)
|
| Se invecie vuoi usare la tua DLL, beh... aiutami a capire.
non è necessario perchè sulle stringhe funzia però sui "file" ...
|
| Ciao
bye


 non è necessario perchè sulle stringhe funzia però sui "file" ...
Boh :)
Puoi provare con
Dim s as string
Open "myfile.iso" for binary as #1
s = Input(lof(#1), 1)
Close #1
e calcolare l'md5 su s, ma comunque ci vorrebbero qualche minuto (se prima
non va in "Memoria esaurita" :P)
Ciao


| Probabilmente dipende da cosa passi alla funzione: usando il ByRef VB si
| aspetta una var. esattamente dello stesso tipo.
esatto
| Se gli permetti conversioni automatiche, es. usando le proprietà di
default
| degli oggetti anzichè indicarli esplicitamente) VB va in casino e i
| risultati sono i più disparati.
|
| L'errore esatto qual è?
| E la riga di codice esatta come'è?
non mi ricordo esattamente ma dovrebbe essere l'errore che indica il
parametro passato byref invece di byval
|
| E poi... sei sicuro che funzioni con i files?
| |
certo che funziona ma non so come, sono stato sul sito di uno che ha fatto
un prog per calcolare l'md5 dei file (mi sembra 
www.md5summer.org
 ) che una
cosa simile a quella che mi serve, solo che non fornisce molte info , ti
regala il prog in cambio di una cartolina ... :-)
|
| A quanto pare vuole una stringa e restituisce una stringa.
| Come potrebbe capire che tu vuoi fare l'MD5 di un file e non della stringa
| "c:\documenti\esempio.txt"?
|
|
| > ma su un file lungo 650 mb come fai ??????
|
| Immagino che in linux sia più semplice per via delle pipe che permettono
il
| reindirizzamento di un file senza caricarlo in memoria... questa domanda
| dovresti farla a NG più specifici.
no su linux si scrive il comando semplicemente così :
md5sum file
poi cosa c'è sotto non lo so.
|
| Al massimo puoi usare md5sum.exe da
| 
http://www.linuxiso.org/viewdoc.php/verifyiso.html
avevo pensato anche a questo ma sai che traffico, devo calcolarlo su tutti i
file presenti in una cartella ... e confrontarlo con quello di una 2°
cartella ....
|
|
| > non è necessario perchè sulle stringhe funzia però sui "file" ...
|
| Boh :)
| Puoi provare con
|
| Dim s as string
| Open "myfile.iso" for binary as #1
| s = Input(lof(#1), 1)
| Close #1
|
| e calcolare l'md5 su s, ma comunque ci vorrebbero qualche minuto (se prima
| non va in "Memoria esaurita" :P)
appunto quello che cerco è non esaurire la memoria ... sai che casino ? e
poi se non ricordo male la lunghezza max di una stringa è 256 caratteri o no
?
|
| Ciao
ciao

 cartella ....
Per fare questo basta un .bat!
For %%i in (%1\*.*) md5sum %%i > %1\%%i.txt
For %%i in (%2\*.*) md5sum %%i > %2\%%i.txt
For %%i in (%1\*.txt) fc %1\%%i > %2\%%i2
Da usare così:
miobat.bat path_1 path_2
Però mi sembra che tu non abbia ben chiari i concetti di programmazione... è
un po' difficile capirsi così, specie se ti ostini a non postare l'errore
corretto e le righe di codice incriminate.


 wrote in message news:Www79.224392
|
| > certo che funziona ma non so come, sono stato sul sito di uno che ha
fatto
| > un prog per calcolare l'md5 dei file (mi sembra 
www.md5summer.org
 ) che
| una
| > cosa simile a quella che mi serve, solo che non fornisce molte info , ti
| > regala il prog in cambio di una cartolina ... :-)
|
| Usando la stessa dll?
| Perchè se non è così il paragone non è significativo.
no so.Questo tizio è un altra persona (non è il creatore della dll) ma sta
facendo le cose dovrei fare io con uno scopo diverso.Se sta usando la stessa
dll non lo so, però gli ho mandato una email e adesso aspetto la sua
clemenza ... sta in Nuova Zelanda (se penso al mio inglese  ...speriamo
bene)
| > file presenti in una cartella ... e confrontarlo con quello di una 2°
| > cartella ....
|
| Per fare questo basta un .bat!
|
| For %%i in (%1\*.*) md5sum %%i > %1\%%i.txt
| For %%i in (%2\*.*) md5sum %%i > %2\%%i.txt
| For %%i in (%1\*.txt) fc %1\%%i > %2\%%i2
|
| Da usare così:
|
| miobat.bat path_1 path_2
|
dicevo prima che ci avevo pensato però volevo restare nell'ambito VB se
possibile
| Però mi sembra che tu non abbia ben chiari i concetti di programmazione...
è
| un po' difficile capirsi così, specie se ti ostini a non postare l'errore
| corretto e le righe di codice incriminate.
|
ok dice così:
______________________________________________
|           errore di compilazione .
|
|           tipo non corrispondente per l'argomento ByRef          |
|______________________________________________|
le righe sono
queste che uso per provare :
Private Sub File1_Click()
Dim a
a = File1.Path & "\" & File1.List(File1.ListIndex)
MsgBox a
MsgBox MD5HexDigest(a) <------ qui da l'errore di cui sopra quindi devo
passare una stringa per forza ...
End Sub
ricorda la chiamata del codice che ho prepostato
...non serve che commento il cod. vero?
| Ciao
ciao

 Dim a
Deve diventare
Dim a As String
E dovrebbe risolversi tutto (sempre che la dll funzioni come dice, perchè
alla fine lei non c'entrava niente :) ).


| Dim a As String
|
| E dovrebbe risolversi tutto (sempre che la dll funzioni come dice, perchè
| alla fine lei non c'entrava niente :) ).
|
| Ciao
Hai ragione (io...che pivello) solo che così passo una stringa sicuramente,
ma non vede il valore stringa come indirizzo di un file e quindi dovrei far
diventare il file una stringa, si può? in modo rapido considerando che
l'operazione è molto ripetitiva ... l'hai fatto qualche volta ? considera
che i file potrebbero essere i + disparati possibile , dal testo al film ...
ciao

 diventare il file una stringa, si può?
Non ho capito se ci fai o cosa!
A queste domande ti ho già ampiamente risposto dicendoti che la DLL non può
sapere se gli passi il percorso di un file o semplicemente una stringa, ma
tu insisti a dire che lei lo sa e fa l'md5 di un file...
Ti ho anche dato il codice per avere il contenuto di un file in una stringa,
più di così.
L'unica cosa che posso consigliarti è di leggerti l'help della dll, e se hai
qualche domanda chiedila al suo autore.


|
| Non ho capito se ci fai o cosa!
|
maddecche
| A queste domande ti ho già ampiamente risposto dicendoti che la DLL non
può
| sapere se gli passi il percorso di un file o semplicemente una stringa, ma
| tu insisti a dire che lei lo sa e fa l'md5 di un file...
se rileggi il cod. vedrai che vuole solo stringhe ...
| | Ti ho anche dato il codice per avere il contenuto di un file in una
stringa,
| più di così.
|
allora , ho voluto ascoltarti fino in fondo ed ho provato con l'aprire il
file in binario e associarlo ad una variabile
conclusione: con i file di una certa rilevanza non ho scoperto il limite
però (tu sai qual'è?), da :"errore di run time 14 spazio stringa esaurito",
con altri funzia e con altri si blocca anche VB, così come entrambi avevamo
supposto.
 suggerimenti ?
| L'unica cosa che posso consigliarti è di leggerti l'help della dll, e se
hai
| qualche domanda chiedila al suo autore.
|
| Ciao
|
ciao