Хэш,md5,сортировка Шэлла - C#
Формулировка задачи:
Помогите пжс девочке разобраться с 3 вещами.
1 - необходимо просмотреть содержимое всех ячеек используемой памяти (человеко-читаемый дамп памяти) - функция DUMP() (функцию написать самому). Все реализовано с помощью хэш-таблицы (уже сделала),в консольке. Если я правильно представляю необходимо вывести на экран содержимое оперативной памяти,но как нигде не нашла(((
2 - использовать один из способов разрешения коллизий:в этой же таблице линейной или квадратичной функцией или вторичным хешированием. Про коллизию читала, вот тут можно человеко-читаемый код,если можно с комментариями "для девочек".
3 - придумать (а если нет фантазии, то взять md5, sha1 или ещё какую) и реализовать/раздобыть вычисление удобной хеш-функции для решения выбранной задачи, программу оформить в виде модуля. Фантазии нет,поэтому прошу,если есть у кого читаемый материал про md5, как делать ПО ШАГАМ (опять же "для девочек"), поделитесь (P.S. викепедия не пойдет, совсем тяжко((()
А, ну,если у кого-то есть хороший рабочий алгоритм сортировки Шэлла, уже вставленный в программу (примерно для 1000000 чисел) то тоже буду благодарна за него))).
Решение задачи: «Хэш,md5,сортировка Шэлла»
textual
Листинг программы
using System;
using System.Security.Cryptography;
using System.Text;
...
public static class MD5Hash
{
static string md5 = null;
public static string GetMD5(string input, Encoding enc)
{
MD5 md5hash = MD5.Create();
byte[] data = md5hash.ComputeHash(enc.GetBytes(input));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
sb.Append(data[i].ToString("x2"));
md5 = sb.ToString();
return md5;
}
public static string GetMD5(char[] input, Encoding enc)
{
MD5 md5hash = MD5.Create();
byte[] data = md5hash.ComputeHash(enc.GetBytes(input));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
sb.Append(data[i].ToString("x2"));
md5 = sb.ToString();
return md5;
}
public static string GetMD5(byte[] input)
{
MD5 md5hash = MD5.Create();
byte[] data = md5hash.ComputeHash(input);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
sb.Append(data[i].ToString("x2"));
md5 = sb.ToString();
return md5;
}
public static string LastHash
{ get { return md5; } }
public static bool VerifyMD5Hash(string input, string hash, Encoding enc)
{
// Hash the input.
string hashOfInput = GetMD5(input, enc);
// Create a StringComparer an compare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
return 0 == comparer.Compare(hashOfInput, hash);
}
public static bool VerifyMD5Hash(byte[] input, string hash)
{
// Hash the input.
string hashOfInput = GetMD5(input);
// Create a StringComparer an compare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
return 0 == comparer.Compare(hashOfInput, hash);
}
}