ASCII код и Хэш код - C#

Узнай цену своей работы

Формулировка задачи:

Вложение 572662Добрый день, в теме диплома получил задание на составление программы для расчета хэш кода, вроде бы все хорошо, товарищ с форума так же помог с кодом, но все оказалось не так сладко, так как в расчете слово разбивается согласно ASCII коду, таблица которую использует преподаватель отлична от той, которая является правильной и используется в программе. Я в принципе нашел закономерность и написал небольшой алгоритм чтобы они совпали, но беда в том, что в конечном расчете программа все равно использует то, что не нужно, просьба помочь. Так же прикрепляю таблицы кодов.(Оригинал - та что используется, актуальная - та что на учебе)
namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {   
                Console.Clear();
                Console.WriteLine("Введите кодируемое слово");
                string s = Console.ReadLine();
                Console.WriteLine("Укажите значение n");
                int n = int.Parse(Console.ReadLine()); //получаем число n
                Console.WriteLine();
                var hash = GetHashCode(s, n);
                Console.WriteLine("Result hash: {0}\r\n", hash);
                Console.WriteLine("Для выхода нажмите ESC, для повтора - любую другую клавишу");
                
            }
            while (Console.ReadKey().Key != ConsoleKey.Escape);
        }
        static byte GetHashCode(string s, int divider)
        {
            int length = s.Length;
            int[] vich = new int[length];
            int[] f = new int[length];
 
            byte[] bytes = Encoding.GetEncoding(1251).GetBytes(s);
            //Начало алгоритма
            for (int i = 0; i < length; i++) //Выполнение условия, чтобы совпала таблица кодов с той которой необходимо.
            {
                if (bytes[i] < 240)
                {
                    if (bytes[i] > 127)
                    {
                        vich[i] = bytes[i] - 64;
                        f[i] = Convert.ToInt32(vich[i]);
                    }
                    else
                    {
                        vich[i] = bytes[i];
                        f[i] = Convert.ToInt32(vich[i]);
                    }
 
                }
                else
                {
                    vich[i] = bytes[i] - 16;
                    f[i] = Convert.ToInt32(vich[i]);
                }
                Console.WriteLine("{0} = {1}", s[i],vich[i]);
                //конец алгоритма
            }
            var hash = (byte)0;
            for (int i = 0; i < length; i++)
            {
                var left = (byte)(f[i] >> 4);//берем левые 4 бита
                GetHashCode(left, divider, ref hash);
                //Console.WriteLine("left = {0}", ToBin(left));
 
                var right = (byte)(f[i] & 0x0F);//берем правые 4 бита
                GetHashCode(right, divider, ref hash);
                //Console.WriteLine("right = {0}", ToBin(right));
            }
 
            return hash;
        }
 
        static void GetHashCode(byte m, int divider, ref byte h)
        {
                m = (byte)(m + 0xF0);//добавляем 11110000
                Console.Write("M: {0}", ToBin(m));
 
                m = (byte)(m ^ h);//сложение по модулю два с хешем
                Console.Write("M ^ H: {0}   ", ToBin(m));
 
                h = (byte)((m * m) % divider);//возводим в квадрат и берем модуль по основанию divider
                Console.WriteLine("H: {0}", ToBin(h));
        }

        //преобразование в строку в бинарном формате, для вывода на экран
        static string ToBin(int v)
        {
            return Convert.ToString(v, 2).PadLeft(8, '0');
        }
    }
}

Решение задачи: «ASCII код и Хэш код»

textual
Листинг программы
byte[] bytes = Encoding.GetEncoding(1251).GetBytes(s);
=>
byte[] bytes = Encoding.GetEncoding("CP866").GetBytes(s);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5