Newsgroup: it.comp.lang.visual-basic
Titolo: Cryptoapi e classe di Zanna

Ho fatto un progettino includendo la classe di Zanna (o meglio, ho spostato
tutto in un bas.. ma non dovrebbe cambiare niente).
La macchina di sviluppo è W2K server, Vb6 + l'ultima s.p.
Ora.. mi si presenta un problema.
La semplice chiamata Decrypt (stringa, chiave):
sulla mia macchina funziona
su altri win2k server funziona
su alcuni win2k pro NON funziona (torna stringa vuota)
su tutti i win98 NON funziona (stesso risultato)
che cavolo può essere? 
Premetto che sulle macchine dove testo il programma non c'è VB6 e non posso
quindi entrare nel debug. Pensavo che il problema fosse la advapi32.dll (la
mia ad esempio è oltre 300k, su win98 circa 60), ma se la includo nel
setup, win 98, dopo il riavvio dell'installazione, mi si pianta con
schermata blu e non parte nemmeno in modalità provvisoria. Solo rimettendo
la "sua" dll riparte.
Qualcuno è già incappato in un problema del genere? la advapi non mi viene
messa nel setup.. non di default. Ce l'ho aggiunta io.Ma come detto, su un
sistema win98 è incompatibile (su altri non ho testato)
--
Regards LaZ
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸
Mi riservo, con fermezza, il diritto di contraddirmi. (Paul Claudel) 
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸

 sistema win98 è incompatibile (su altri non ho testato)
E' vero non funziona, mi è capitato anche a me, non con la classe in
questione ma utilizzando le api advapi32.dll.
Ho risolto facendomi un mio algoritmo.
ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Ho risolto facendomi un mio algoritmo.
Sì pensavo anche io di fare qualcosa di personale.. ma visto che la
finalità è decriptare files di qualche mega, comincio a nutrire dei dubbi
sulla velocità.. :-\


 che cavolo può essere?
Si, c'e' un piccolo problema o meglio alcune omissioni nel segnalare
errori... uno in particolare, che 90 su 100 e' quello che ti si presenta e
che puo' essere recuperato con una chiamata aggiuntiva:
'Codice originale metodo Decript
'[...]
If CryptAcquireContext(lHCryptProv, 0&, sProvider, PROV_RSA_FULL, 0) Then
  If CryptCreateHash(lHCryptProv, CALG_MD5, 0, 0, lHHash) Then
    If CryptHashData(lHHash, EncryptionKey, Len(EncryptionKey), 0) Then
'[...]
'Codice modificato
'[...]
lngRet = CryptAcquireContext(lHCryptProv, 0&, sProvider, PROV_RSA_FULL, 0)
If lngRet = 0 Then
    If Err.LastDllError = NTE_BAD_KEYSET Then
        'il keyset predefinito non sempre esiste nel registro, con questa
        'ulteriore chiamata viene creato...
        lngRet = CryptAcquireContext(lHCryptProv, 0&, sProvider _
                , PROV_RSA_FULL, CRYPT_NEWKEYSET)
        If lngRet = 0 Then
            MsgBox "CryptoAPI.CryptAcquireContext (NEW): " _
                & Err.LastDllError, vbCritical, MsgCaption
        End If
    Else
        MsgBox "CryptoAPI.CryptAcquireContext: " _
            & Err.LastDllError, vbCritical, MsgCaption
    End If
End If
If lHCryptProv Then
    If CryptCreateHash(lHCryptProv, CALG_MD5, 0, 0, lHHash) Then
        If CryptHashData(lHHash, EncryptionKey, Len(EncryptionKey), 0) Then
'[...]
Mi pare di ricordare che un ulteriore problema potrebbe essere legato ai
diritti di accesso dell'utente, quando si prova a creare il keyset, ma e'
sufficiente eseguire la procedura una tantum come amministratore per
risolvere
Chiedo scusa per non aver segnalato prima la cosa al Sito Comune...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

che puo' essere recuperato con una chiamata aggiuntiva:
Grande! Funziona :-))
Mi permetto di effettuare un'aggiunta:
Const NTE_BAD_KEYSET = &H80090016
Ma il problema quale sarebbe? Il Keyset predefinito?
Quindi anche nella encrypt andrebbe aggiunta la stessa routine.
Grazie 4mila comunque.


 Quindi anche nella encrypt andrebbe aggiunta la stessa routine.
Esattamente, ovunque fai una chiamata a CryptAcquireContext (quindi sia in
Encrypt sia in Decrypt) devi fare il test sul codice di errore e in caso di
BAD_KEYSET tentare di crearne uno... la IF che ho postato va bene pari-pari
anche per Encrypt...


Hem...
non per intromettermi, ma quale sarebbe questa mia classe?
Spero non la clsCrypto, perchè *NON* è mia (ecco un'altra cosa da correggere
sul SC).
Io ne avevo scritta una ma non mi sembra di averla mai pubblicata.
Ciao

sul SC).
Proprio quella. Forse ho letto male, ma mi sembrava che tu fossi citato
come autore.


 sul SC).
Si, e' quella... probabilmente ha citato te perche' l'autore e' ignoto e tu
risulti come fornitore
