209 messaggi dal 23 agosto 2007
Ciao,

utilizzo il seguente codice per eseguire una HttpRPC request e cifrare tramite l'algoritmo MD5 uno dei parametri:
 
        private string getChallenge() 
        { 
            String cmd = "1055"; 
            // Build up request URL (use BaseURL1 or BaseURL2) 
            String url = baseURL1 + ":" + port + "/nvrpc.asp?cmd=" + cmd + "&" 
                + "params=5:" 
                + "0:" + versionNo + ";" 
                + "1:" + requestID + ";" 
                + "2:" + clientID + ";" 
                + "3:" + HashStr_MD5(clientID + sharedSecret) + ";" 
                + "4:" + contractNo + ";"; 
 
            return ExecuteURL(url); 
        } 
 
..... 
 
public String HashStr_MD5(String TextToHash) 
        { 
            System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
            byte[] data = System.Text.Encoding.ASCII.GetBytes(TextToHash); 
            data = x.ComputeHash(data); 
            string ret = ""; 
            for (int i = 0; i < data.Length; i++) 
            { 
                ret += data[i].ToString("x2").ToLower(); 
            } 
            return ret; 
        } 


Dato che tale operazione viene eseguita ogni volta si intenda accedere ad un server esterno, vorrei memorizzare il dato di ritorno di tale metodo, in modo da poterlo riusare successivamente. Tuttavia se faccio in tal modo, il server esterno mi ritorna un messaggio di errore "Invalid Authentication".

E' questo dovuto all'algoritmo MD5 (dato che fra una chiamata e quella successiva il parametro cifrato e' l'unico che cambia) in modo da prevenire attacchi per replay?

Grazie
Modificato da paquito_ita il 05 maggio 2010 15.25 -
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
"paquito_ita" <paquito_ita> wrote in message news:360810@...
Ciao,
utilizzo il seguente codice per eseguire una HttpRPC request e cifrare tramite l'algoritmo MD5 uno dei parametri:
private string getChallenge()
{
String cmd = "1055";
// Build up request URL (use BaseURL1 or BaseURL2)
String url = baseURL1 + ":" + port + "/nvrpc.asp?cmd=" + cmd + "&"
+ "params=5:"
+ "0:" + versionNo + ";"
+ "1:" + requestID + ";"
+ "2:" + clientID + ";"
+ "3:" + HashStr_MD5(clientID + sharedSecret) + ";"
+ "4:" + contractNo + ";";
return ExecuteURL(url);
}
....
public String HashStr_MD5(String TextToHash)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.ASCII.GetBytes(TextToHash); data = x.ComputeHash(data);
string ret = "";
for (int i = 0; i < data.Length; i++)
{
ret += data[i].ToString("x2").ToLower();
}
return ret;
}
Dato che tale operazione viene eseguita ogni volta si intenda accedere ad un server esterno, vorrei memorizzare il dato di ritorno di tale metodo, in
modo da poterlo riusare successivamente. Tuttavia se faccio in tal modo, il
server esterno mi ritorna un messaggio di errore "Invalid Authentication". E' questo dovuto all'algoritmo MD5 (dato che fra una chiamata e quella successiva il parametro cifrato e' l'unico che cambia) in modo da prevenire
attacchi per replay?
Grazie
Modificato da paquito_ita il 05 maggio 2010 15.25 -
Ciao, credo dipenda dai controlli che esegue il servizio esterno, l'algoritmo cripta la coppia clientID + sharedSecret e tu passi clientId anche come come parametro in chiaro: questo valore è costante tra una chiamata e l'altra?

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
209 messaggi dal 23 agosto 2007
Ciao Alessio,

dopo qualche test ho notato che il parametro che io cifro e invio rimane inalterato fra una chiamta e l'altra, mentre il valore di ritorno del metodo getChallange() varia di volta in volta.

Tale valore di ritorno e' poi usato a sua volta come parametro per successive chiamate e tutto funziona.

Il problema e' che se invoco una seconda volta i metodi successivi passando lo stesso paramtero restituito da getChallange() ottengo un errore (anche se i parametri inviati sono esattamente gli stessi della precedente chiamata).

A questo punto quindi non mi rimane che pensare che il server esterno serva solo una chiamata con determinati parametri.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.