Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс HMACSHA1

 

Опубликовано: Октябрь 2016

Вычисляет хеш основанный код проверки подлинности сообщения (HMAC) с помощью SHA1 хеш-функции.

Пространство имен:   System.Security.Cryptography
Сборка:  mscorlib (в mscorlib.dll)


[ComVisibleAttribute(true)]
public class HMACSHA1 : HMAC

ИмяОписание
System_CAPS_pubmethodHMACSHA1()

Инициализирует новый экземпляр HMACSHA1 класса случайный ключ.

System_CAPS_pubmethodHMACSHA1(Byte[])

Инициализирует новый экземпляр класса HMACSHA1 указанными данными ключа.

System_CAPS_pubmethodHMACSHA1(Byte[], Boolean)

Инициализирует новый экземпляр HMACSHA1 с указанными данными ключа и значение, указывающее необходимость использования управляемой версии алгоритма SHA1.

ИмяОписание
System_CAPS_protpropertyBlockSizeValue

Возвращает или задает размер блока, используемый в хэш-значении.(Наследуется от HMAC.)

System_CAPS_pubpropertyCanReuseTransform

Возвращает значение, указывающее, возможно ли повторное использование текущего преобразования.(Наследуется от HashAlgorithm.)

System_CAPS_pubpropertyCanTransformMultipleBlocks

Если переопределено в производном классе, возвращает значение, указывающее, возможно ли преобразование нескольких блоков.(Наследуется от HashAlgorithm.)

System_CAPS_pubpropertyHash

Возвращает значение вычисляемого хэш-кода.(Наследуется от HashAlgorithm.)

System_CAPS_pubpropertyHashName

Возвращает или задает имя используемого хэш-алгоритма.(Наследуется от HMAC.)

System_CAPS_pubpropertyHashSize

Возвращает размер вычисляемого хэш-кода в битах.(Наследуется от HashAlgorithm.)

System_CAPS_pubpropertyInputBlockSize

Если переопределено в производном классе, возвращает размер входного блока.(Наследуется от HashAlgorithm.)

System_CAPS_pubpropertyKey

Возвращает или задает ключ, используемый в хэш-алгоритме.(Наследуется от HMAC.)

System_CAPS_pubpropertyOutputBlockSize

Если переопределено в производном классе, возвращает размер выходного блока.(Наследуется от HashAlgorithm.)

ИмяОписание
System_CAPS_pubmethodClear()

Освобождает все ресурсы, используемые классом HashAlgorithm.(Наследуется от HashAlgorithm.)

System_CAPS_pubmethodComputeHash(Byte[])

Вычисляет хэш-значение для заданного массива байтов.(Наследуется от HashAlgorithm.)

System_CAPS_pubmethodComputeHash(Byte[], Int32, Int32)

Вычисляет хэш-значение для заданной области заданного массива байтов.(Наследуется от HashAlgorithm.)

System_CAPS_pubmethodComputeHash(Stream)

Вычисляет хэш-значение для заданного объекта Stream.(Наследуется от HashAlgorithm.)

System_CAPS_pubmethodDispose()

Освобождает все ресурсы, используемые текущим экземпляром класса HashAlgorithm.(Наследуется от HashAlgorithm.)

System_CAPS_protmethodDispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом HMAC, и, если допускается изменение ключа, опционально освобождает управляемые ресурсы.(Наследуется от HMAC.)

System_CAPS_pubmethodEquals(Object)

Определяет, равен ли заданный объект текущему объекту.(Наследуется от Object.)

System_CAPS_protmethodFinalize()

Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как он будет уничтожен во время сборки мусора.(Наследуется от Object.)

System_CAPS_pubmethodGetHashCode()

Служит хэш-функцией по умолчанию.(Наследуется от Object.)

System_CAPS_pubmethodGetType()

Возвращает объект Type для текущего экземпляра.(Наследуется от Object.)

System_CAPS_protmethodHashCore(Byte[], Int32, Int32)

Если переопределено в производном классе, передает данные, записанные в объект, на вход хэш-алгоритма HMAC по умолчанию для вычисления значения хэша.(Наследуется от HMAC.)

System_CAPS_protmethodHashFinal()

Если переопределено в производном классе, завершает вычисление хэша после обработки последних данных криптографическим потоковым объектом.(Наследуется от HMAC.)

System_CAPS_pubmethodInitialize()

Инициализирует новый экземпляр реализации по умолчанию класса HMAC.(Наследуется от HMAC.)

System_CAPS_protmethodMemberwiseClone()

Создает неполную копию текущего объекта Object.(Наследуется от Object.)

System_CAPS_pubmethodToString()

Возвращает строку, представляющую текущий объект.(Наследуется от Object.)

System_CAPS_pubmethodTransformBlock(Byte[], Int32, Int32, Byte[], Int32)

Вычисляет хэш-значение для заданной области входного массива байтов и копирует указанную область входного массива байтов в заданную область выходного массива байтов.(Наследуется от HashAlgorithm.)

System_CAPS_pubmethodTransformFinalBlock(Byte[], Int32, Int32)

Вычисляет хэш-значение для заданной области заданного массива байтов.(Наследуется от HashAlgorithm.)

ИмяОписание
System_CAPS_protfieldHashSizeValue

Представляет размер вычисляемого хэш-кода в битах.(Наследуется от HashAlgorithm.)

System_CAPS_protfieldHashValue

Представляет значение вычисляемого хэш-кода.(Наследуется от HashAlgorithm.)

System_CAPS_protfieldKeyValue

Ключ, используемый в хэш-алгоритме.(Наследуется от KeyedHashAlgorithm.)

System_CAPS_protfieldState

Представляет состояние процесса вычисления хэша.(Наследуется от HashAlgorithm.)

HMACSHA1 — Это тип, построенный на основе хэш-функцию SHA1 и используется как HMAC, или код проверки подлинности сообщения на основе хэша хэш-алгоритма. Процесс HMAC смешивании секретного ключа с данными сообщения, вычислении хэш-функции результата, снова смешивании хэш-значения с секретным ключом и применяет хэш-функцию во второй раз. Выходного хэша составляет длиной 160 бит.

Код HMAC может использоваться для выявления факта подделки сообщения, передаваемого по незащищенному каналу, при условии, что отправитель и получатель совместно используют секретный ключ. Отправитель вычисляет значение хэша исходных данных и передает исходные данные и значение хэша в одном сообщении. Получатель повторно вычисляет значение хэша для полученного сообщения и проверяет, что совпадает передаваемых HMAC.

Любое изменение данных или значения хэша вызовет несовпадение, поскольку для изменения сообщения и повторного создания правильного кода HMAC необходимо знать секретный ключ. Таким образом Если исходный и вычисляемый хэш-коды совпадают, сообщение проходит проверку подлинности.

Хэш SHA-1 (Secure Hash Algorithm, также называемый SHS, Secure Hash стандартные) — это алгоритм криптографический хэш, опубликованное правительством США. Он выдает значение 160-разрядный хэш-код из строк произвольной длины.

HMACSHA1 допускает использование ключей любого размера и создает хеш-последовательность, длиной 160 бит.

В следующем примере кода показано, как подписать файл с помощью HMACSHA1 объект и убедитесь, что файл.

using System;
using System.IO;
using System.Security.Cryptography;

public class HMACSHA1example
{

    public static void Main(string[] Fileargs)
    {
        string dataFile;
        string signedFile;
        //If no file names are specified, create them.
        if (Fileargs.Length < 2)
        {
            dataFile = @"text.txt";
            signedFile = "signedFile.enc";

            if (!File.Exists(dataFile))
            {
                // Create a file to write to.
                using (StreamWriter sw = File.CreateText(dataFile))
                {
                    sw.WriteLine("Here is a message to sign");
                }
            }

        }
        else
        {
            dataFile = Fileargs[0];
            signedFile = Fileargs[1];
        }
        try
        {
            // Create a random key using a random number generator. This would be the
            //  secret key shared by sender and receiver.
            byte[] secretkey = new Byte[64];
            //RNGCryptoServiceProvider is an implementation of a random number generator.
            using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
            {
                // The array is now filled with cryptographically strong random bytes.
                rng.GetBytes(secretkey);

                // Use the secret key to sign the message file.
                SignFile(secretkey, dataFile, signedFile);

                // Verify the signed file
                VerifyFile(secretkey, signedFile);
            }
        }
        catch (IOException e)
        {
            Console.WriteLine("Error: File not found", e);
        }

    }  //end main
    // Computes a keyed hash for a source file and creates a target file with the keyed hash
    // prepended to the contents of the source file. 
    public static void SignFile(byte[] key, String sourceFile, String destFile)
    {
        // Initialize the keyed hash object.
        using (HMACSHA1 hmac = new HMACSHA1(key))
        {
            using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
            {
                using (FileStream outStream = new FileStream(destFile, FileMode.Create))
                {
                    // Compute the hash of the input file.
                    byte[] hashValue = hmac.ComputeHash(inStream);
                    // Reset inStream to the beginning of the file.
                    inStream.Position = 0;
                    // Write the computed hash value to the output file.
                    outStream.Write(hashValue, 0, hashValue.Length);
                    // Copy the contents of the sourceFile to the destFile.
                    int bytesRead;
                    // read 1K at a time
                    byte[] buffer = new byte[1024];
                    do
                    {
                        // Read from the wrapping CryptoStream.
                        bytesRead = inStream.Read(buffer, 0, 1024);
                        outStream.Write(buffer, 0, bytesRead);
                    } while (bytesRead > 0);
                }
            }
        }
        return;
    } // end SignFile


    // Compares the key in the source file with a new key created for the data portion of the file. If the keys 
    // compare the data has not been tampered with.
    public static bool VerifyFile(byte[] key, String sourceFile)
    {
        bool err = false;
        // Initialize the keyed hash object. 
        using (HMACSHA1 hmac = new HMACSHA1(key))
        {
            // Create an array to hold the keyed hash value read from the file.
            byte[] storedHash = new byte[hmac.HashSize / 8];
            // Create a FileStream for the source file.
            using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
            {
                // Read in the storedHash.
                inStream.Read(storedHash, 0, storedHash.Length);
                // Compute the hash of the remaining contents of the file.
                // The stream is properly positioned at the beginning of the content, 
                // immediately after the stored hash value.
                byte[] computedHash = hmac.ComputeHash(inStream);
                // compare the computed hash with the stored value

                for (int i = 0; i < storedHash.Length; i++)
                {
                    if (computedHash[i] != storedHash[i])
                    {
                        err = true;
                    }
                }
            }
        }
        if (err)
        {
            Console.WriteLine("Hash values differ! Signed file has been tampered with!");
            return false;
        }
        else
        {
            Console.WriteLine("Hash values agree -- no tampering occurred.");
            return true;
        }

    } //end VerifyFile

} //end class

.NET Framework
Доступно с 1.1
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: