Код:
public string GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = File.ReadAllBytes(input);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach(byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
string password = s.ToString();
return password;
}
public string getSHA1(string input)
{
return BitConverter.ToString(System.Security.Cryptography.SHA1Managed.Create().ComputeHash(Encoding.Default.GetBytes(input))).Replace("-", "");
}
public string getSHA256(string input)
{
string hash = null;
var sha256 = System.Security.Cryptography.SHA256.Create();
Byte[] hashBytes = sha256.ComputeHash(Encoding.Default.GetBytes(input));
hash = BitConverter.ToString(hashBytes);
return hash.Replace("-", "");
}
В качестве INPUT - полный путь к файлу.
отправка запроса на VirusTotal:
Код:
//созд. объект, который отравляет GET и POST запросы
Stream stRequest;
System.Net.WebRequest objRequest = System.Net.WebRequest.Create("http://www.virustotal.com/vt/en/consultamd5");
objRequest.Method = "POST";
objRequest.ContentType = "application/x-www-form-urlencoded";
objRequest.Timeout = 120000;
objRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
StringBuilder sendString = new StringBuilder();
sendString.AppendFormat("hash={0}", "ТУТ ПОЛУЧЕННЫЙ MD5");
//узнаём длину строки, нужную для POST запросов
byte[] SomeBytes = Encoding.UTF8.GetBytes(sendString.ToString());
objRequest.ContentLength = SomeBytes.Length;
stRequest = objRequest.GetRequestStream();//открывает поток
stRequest.Write(SomeBytes, 0, SomeBytes.Length);//пишет в него
stRequest.Close();
//тут же ждем ответа от cgi. если ответ не нужен, то не ждите :)
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) objRequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string res = reader.ReadToEnd();
//Читаем файл
using(StreamWriter sw = new StreamWriter(PathToDocs + "\\" + row.Cells[0].Value.ToString() + "-" + row.Cells[2].Value.ToString() + ".html"))
{
sw.Write(res);
}
reader.Close();
response.Close();
sendString.AppendFormat("hash={0}", "ТУТ ПОЛУЧЕННЫЙ MD5");
hash={0} - слово HASH берется из требуемой страницы на сервере. Я просматривал код страницы
http://www.virustotal.com/vt/en/consultamd5, там есть TextBox с ID="hash". Вот его и указываем при отправке POST запроса.