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

Класс MACTripleDES

 

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

Вычисляет код проверки подлинности сообщения (MAC) с помощью алгоритма TripleDES для входных данных CryptoStream.

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


[ComVisibleAttribute(true)]
public class MACTripleDES : KeyedHashAlgorithm

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

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

System_CAPS_pubmethodMACTripleDES(Byte[])

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

System_CAPS_pubmethodMACTripleDES(String, Byte[])

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

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

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

System_CAPS_pubpropertyCanTransformMultipleBlocks

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

System_CAPS_pubpropertyHash

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

System_CAPS_pubpropertyHashSize

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

System_CAPS_pubpropertyInputBlockSize

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

System_CAPS_pubpropertyKey

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

System_CAPS_pubpropertyOutputBlockSize

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

System_CAPS_pubpropertyPadding

Возвращает или задает режим заполнения, используемый в хэш-алгоритме.

ИмяОписание
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)

Освобождает ресурсы, используемые экземпляром MACTripleDES.(Переопределяет KeyedHashAlgorithm.Dispose(Boolean).)

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

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

System_CAPS_pubmethodGetHashCode()

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

System_CAPS_pubmethodGetType()

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

System_CAPS_protmethodHashCore(Byte[], Int32, Int32)

Передает данные, записанные в объект, в шифратор TripleDES для вычисления кода проверки подлинности сообщения (MAC).(Переопределяет HashAlgorithm.HashCore(Byte[], Int32, Int32).)

System_CAPS_protmethodHashFinal()

Возвращает вычисленный код проверки подлинности сообщения (MAC) после записи в объект всех данных.(Переопределяет HashAlgorithm.HashFinal().)

System_CAPS_pubmethodInitialize()

Инициализирует экземпляр MACTripleDES.(Переопределяет HashAlgorithm.Initialize().)

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.)

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

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

MACTripleDES использует ключ, который имеет длину 16 или 24 байта и создает хеш-последовательность длиной 8 байт.

В следующем примере создается MAC для файла с именем input.txt, который находится в папке, содержащей исполняемый файл примера. MAC-адрес и исходный текст, записываются в файл с именем encrypted.hsh в той же папке. Подписанный файл затем считываются и MAC рассчитывается для текстового файла и по сравнению с MAC, которая входит в состав текст.

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

public class MACTripleDESexample
{

    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[24];
            //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 (MACTripleDES hmac = new MACTripleDES(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 (MACTripleDES hmac = new MACTripleDES(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

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

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