HashAlgorithm.TransformFinalBlock(Byte[], Int32, Int32) Метод

Определение

Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array.

public:
 virtual cli::array <System::Byte> ^ TransformFinalBlock(cli::array <System::Byte> ^ inputBuffer, int inputOffset, int inputCount);
public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount);
abstract member TransformFinalBlock : byte[] * int * int -> byte[]
override this.TransformFinalBlock : byte[] * int * int -> byte[]
Public Function TransformFinalBlock (inputBuffer As Byte(), inputOffset As Integer, inputCount As Integer) As Byte()

Параметры

inputBuffer
Byte[]

Входные данные, для которых вычисляется хэш-код.The input to compute the hash code for.

inputOffset
Int32

Смещение в массиве байтов, начиная с которого следует использовать данные.The offset into the byte array from which to begin using data.

inputCount
Int32

Число байтов в массиве для использования в качестве данных.The number of bytes in the byte array to use as data.

Возвраты

Byte[]

Массив, который является копией хэшируемой части входных данных.An array that is a copy of the part of the input that is hashed.

Реализации

Исключения

Недопустимое значение параметра inputCount.inputCount uses an invalid value.

- или --or- Для параметра inputBuffer задано недопустимое смещение.inputBuffer has an invalid offset length.

Свойство inputBuffer имеет значение null.inputBuffer is null.

inputOffset выходит за пределы допустимого диапазона.inputOffset is out of range. Значение этого параметра не должно быть отрицательным.This parameter requires a non-negative number.

Объект уже удален.The object has already been disposed.

Примеры

В следующих примерах кода для TransformFinalBlock хэширования строки TransformBlock используется метод с методом.The following code examples use the TransformFinalBlock method with the TransformBlock method to hash a string.

using System;
using System.Security.Cryptography;
using System.Text;

class MainClass
{
    public static void Main()
    {
        RandomNumberGenerator rnd = RandomNumberGenerator.Create();

        byte[] input = new byte[20];
        rnd.GetBytes(input);

        Console.WriteLine("Input        : {0}\n", BytesToStr(input));
        PrintHash(input);
        PrintHashOneBlock(input);
        PrintHashMultiBlock(input, 1);
        PrintHashMultiBlock(input, 2);
        PrintHashMultiBlock(input, 3);
        PrintHashMultiBlock(input, 5);
        PrintHashMultiBlock(input, 10);
        PrintHashMultiBlock(input, 11);
        PrintHashMultiBlock(input, 19);
        PrintHashMultiBlock(input, 20);
        PrintHashMultiBlock(input, 21);
    }

    public static string BytesToStr(byte[] bytes)
    {
        StringBuilder str = new StringBuilder();

        for (int i = 0; i < bytes.Length; i++)
            str.AppendFormat("{0:X2}", bytes[i]);

        return str.ToString();
    }

    public static void PrintHash(byte[] input)
    {
        SHA256Managed sha = new SHA256Managed();
        Console.WriteLine("ComputeHash  : {0}", BytesToStr(sha.ComputeHash(input)));
    }

    public static void PrintHashOneBlock(byte[] input)
    {
        SHA256Managed sha = new SHA256Managed();
        sha.TransformFinalBlock(input, 0, input.Length);
        Console.WriteLine("FinalBlock   : {0}", BytesToStr(sha.Hash));
    }

    public static void PrintHashMultiBlock(byte[] input, int size)
    {
        SHA256Managed sha = new SHA256Managed();
        int offset = 0;

        while (input.Length - offset >= size)
            offset += sha.TransformBlock(input, offset, size, input, offset);

        sha.TransformFinalBlock(input, offset, input.Length - offset);
        Console.WriteLine("MultiBlock {0:00}: {1}", size, BytesToStr(sha.Hash));
    }

}

Imports System.Text
Imports System.Security.Cryptography

Class Program

    Public Shared Sub Main()
        Dim rnd As RandomNumberGenerator = RandomNumberGenerator.Create
        Dim input() As Byte = New Byte((20) - 1) {}
        rnd.GetBytes(input)
        Console.WriteLine("Input        : {0}"& vbLf, BytesToStr(input))
        PrintHash(input)
        PrintHashOneBlock(input)
        PrintHashMultiBlock(input, 1)
        PrintHashMultiBlock(input, 2)
        PrintHashMultiBlock(input, 3)
        PrintHashMultiBlock(input, 5)
        PrintHashMultiBlock(input, 10)
        PrintHashMultiBlock(input, 11)
        PrintHashMultiBlock(input, 19)
        PrintHashMultiBlock(input, 20)
        PrintHashMultiBlock(input, 21)
    End Sub

    Public Shared Function BytesToStr(ByVal bytes() As Byte) As String
        Dim str As StringBuilder = New StringBuilder
        Dim i As Integer = 0
        Do While (i < bytes.Length)
        str.AppendFormat("{0:X2}", bytes(i))
        i = (i + 1)
        Loop
        Return str.ToString
    End Function

    Public Shared Sub PrintHash(ByVal input() As Byte)
        Dim sha As SHA256Managed = New SHA256Managed
        Console.WriteLine("ComputeHash  : {0}", BytesToStr(sha.ComputeHash(input)))
    End Sub

    Public Shared Sub PrintHashOneBlock(ByVal input() As Byte)
        Dim sha As SHA256Managed = New SHA256Managed
        sha.TransformFinalBlock(input, 0, input.Length)
        Console.WriteLine("FinalBlock   : {0}", BytesToStr(sha.Hash))
    End Sub

    Public Shared Sub PrintHashMultiBlock(ByVal input() As Byte, ByVal size As Integer)
        Dim sha As SHA256Managed = New SHA256Managed
        Dim offset As Integer = 0

        While ((input.Length - offset)  _
            >= size)
        offset = (offset + sha.TransformBlock(input, offset, size, input, offset))

        End While
        sha.TransformFinalBlock(input, offset, (input.Length - offset))
        Console.WriteLine("MultiBlock {0:00}: {1}", size, BytesToStr(sha.Hash))
    End Sub
End Class

Комментарии

Необходимо вызвать TransformFinalBlock метод после вызова метода, TransformBlock но перед получением окончательного хэш-значения.You must call the TransformFinalBlock method after calling the TransformBlock method but before you retrieve the final hash value.

Обратите внимание, что возвращаемое значение этого метода не является хэш-значением, а только копией хэшированной части входных данных.Note that the return value of this method is not the hash value, but only a copy of the hashed part of the input data. Чтобы получить итоговое хэшированное значение после вызова TransformFinalBlock метода, получите массив байтов, содержащийся Hash в свойстве.To retrieve the final hashed value after calling the TransformFinalBlock method, get the byte array contained in the Hash property.

Применяется к