Вычисление хеш-суммы для файлов
Блог 24 декабря 2013
Многие сайты показывают хеш-сумму для
файлов, которые можно с них загрузить. Можно найти программку, которая ее вычисляет (чтобы убедиться в неизменности файла), но лучше написать
самому...
Делаем консольное приложение на C#.
using System;
using
System.Collections.Generic;
using System.IO;
using System.Text;
using System.Configuration;
namespace hash
{
class Program
{
static void Main(string[] args)
{
string file = ConfigurationManager.AppSettings["file"];
string hash =
ConfigurationManager.AppSettings["hash"];
string s = "The quick brown fox jumps over the lazy dog";//2fd4e1c6 7a2d28fc ed849ee1 bb76e739
1b93eb12
string sOut = "";
if (string.IsNullOrEmpty(hash))
{
Console.WriteLine("SHA1 hash of
" + s + "=" + HashSha1(s));
}
else if (hash != "md5" && hash != "sha1")
{
Console.WriteLine
("hash 'md5' or 'sha1'!");
}
else
{
try
{
byte[] bb
= File.ReadAllBytes(file);
if (hash == "md5")
sOut = HashMD5(bb);
if (hash ==
"sha1")
sOut = HashSha1(bb);
Console.WriteLine("hash=" + sOut);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
Console.ReadKey();
}
Загружаем из конфиг-файла управляющие параметры: имя файла и тип хеша. Считываем файл. Вызываем функцию для вычисления
хеша, выводим на консоль. Ждем нажатия клавиши.
//MD5
public static string HashMD5(byte[]
bb)
{
if (bb == null || bb.Length == 0) return "";
System.Security.Cryptography.MD5CryptoServiceProvider oMD5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bytes = oMD5.ComputeHash(bb);
System.Text.StringBuilder hexString =
new System.Text.StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
{
hexString.Append(bytes
[i].ToString("x2"));
}
return hexString.ToString();
}
public static string HashMD5(String sIn)
{
if (sIn == null || sIn.Length == 0) return "";
System.Text.UTF8Encoding oUTF8 = new System.Text.UTF8Encoding();
byte[] bytes = oUTF8.GetBytes(sIn);
return HashMD5(bytes);
}
//SHA1
public static string HashSha1(byte[] bb)
{
if (bb == null || bb.Length == 0) return "";
System.Security.Cryptography.SHA1CryptoServiceProvider oMD5 = new
System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] bytes = oMD5.ComputeHash(bb);
System.Text.StringBuilder hexString =
new System.Text.StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
{
hexString.Append(bytes
[i].ToString("x2"));
}
return hexString.ToString();
}
public static string HashSha1(String sIn)
{
if (sIn == null || sIn.Length == 0) return "";
System.Text.UTF8Encoding oUTF8 = new System.Text.UTF8Encoding();
byte[] bytes = oUTF8.GetBytes(sIn);
return HashSha1(bytes);
}
}
}
Создаем объект провайдер криптографического
сервиса соответсвующего типа (MD5 или SHA1). Вычисляем биты хеша, конвертируем в строку.
Комментарии
| Андрей: 29-12-2013 16:07 Краткость - сестра таланта)
|
Добавить комментарий могут только авторизованные пользователи.
Авторизоваться