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 -