SHA1 хеширование - C#

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

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

Ребят, долго искал прогу по SHA1, нашел наконец-то, там класс, в котором содержаться все необходимые операции для выполнения хеширования, только вот возникла новая проблема: не получается написать функцию main для проверки работоспособности класса, сам новичок в C#. Помогите пожалуйста добить код, вот скину все что у меня есть, саму функцию main и сам класс. Благодарю заранее
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
 
namespace Sha1
{
  class Program
    {
        static void Main(string[] args)
        {
            //var text = args[0];
            string text = "Николай";
            string hash = sha1(text);
            Console.WriteLine("Хэшированное слово:\n{0}", hash);
            Console.ReadLine();
        }
    }
 
    static class sha1
    {
        static byte[] pad(byte[] mes)
        {
            byte[] newMes = new byte[((mes.LongLength * 8 + 512 - 447) / 512 + 1) * 512 / 8];
            for (long i = 0; i < mes.LongLength; i++)
            {
                newMes[i] = mes[i];
            }
            newMes[mes.LongLength] = (1 << 7);
            ulong l = (ulong)mes.LongLength * 8;
            for (int i = 0; i < 8; i++)
            {//write l to end of padding
                newMes[newMes.LongLength - i - 1] = (byte)(l >> (i * 8));
            }
            return newMes;
        }
 
        static uint ch(uint x, uint y, uint z)
        {
            return (x & y) ^ ((~x) & z);
        }
 
        static uint parity(uint x, uint y, uint z)
        {
            return x ^ y ^ z;
        }
 
        static uint maj(uint x, uint y, uint z)
        {
            return (x & y) ^ (x & z) ^ (y & z);
        }
 
        static uint ft(uint x, uint y, uint z, int t)
        {
            if (t <= 19)
                return ch(x, y, z);
            if (t <= 39)
                return parity(x, y, z);
            if (t <= 59)
                return maj(x, y, z);
            return parity(x, y, z);
        }
 
        static uint rotl(uint a, int n)
        {
            return (a << n) | (a >> (32 - n));
        }
 
        static uint kt(int t)
        {
            if (t <= 19)
                return 0x5a827999;
            if (t <= 39)
                return 0x6ed9eba1;
            if (t <= 59)
                return 0x8f1bbcdc;
            return 0xca62c1d6;
        }
 
        static uint wt(byte[] mes, int i, int t)
        {
            if (t <= 15)
                return mes.Skip(i * 512 / 8 + t * 4).Take(4).Aggregate((uint)0, (cur, next) =>
                    (cur << 8) | next);
            return rotl(wt(mes, i, t - 3) ^ wt(mes, i, t - 8) ^ wt(mes, i, t - 14) ^
                wt(mes, i, t - 16), 1);
        }
 
        public static uint[] Hash(byte[] mes)
        {
            mes = pad(mes);
            uint a = 0x67452301;
            uint b = 0xefcdab89;
            uint c = 0x98badcfe;
            uint d = 0x10325476;
            uint e = 0xc3d2e1f0;
 
            for (int i = 0; i < mes.LongLength / 64; i++)
            {
                uint a1 = a;
                uint b1 = b;
                uint c1 = c;
                uint d1 = d;
                uint e1 = e;
 
                for (int t = 0; t <= 79; t++)
                {
                    uint T = rotl(a, 5) + ft(b, c, d, t) + e + kt(t) + wt(mes, i, t);
                    e = d;
                    d = c;
                    c = rotl(b, 30);
                    b = a;
                    a = T;
                }
                a += a1;
                b += b1;
                c += c1;
                d += d1;
                e += e1;
            }
 
            return new uint[] { a, b, c, d, e };
        }
    }
 
}

Решение задачи: «SHA1 хеширование»

textual
Листинг программы
string hash = sha1.Hash(text);

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


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

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

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