HashAlgorithm.TransformFinalBlock(Byte[], Int32, Int32) HashAlgorithm.TransformFinalBlock(Byte[], Int32, Int32) HashAlgorithm.TransformFinalBlock(Byte[], Int32, Int32) HashAlgorithm.TransformFinalBlock(Byte[], Int32, Int32) Method

Definição

Calcula o valor de hash para a região especificada da matriz de bytes especificada.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()

Parâmetros

inputBuffer
Byte[]

A entrada para a qual calcular o código hash.The input to compute the hash code for.

inputOffset
Int32 Int32 Int32 Int32

O deslocamento para a matriz de bytes com base na qual os dados começarão a ser usados.The offset into the byte array from which to begin using data.

inputCount
Int32 Int32 Int32 Int32

O número de bytes na matriz de bytes a ser usado como dados.The number of bytes in the byte array to use as data.

Retornos

Byte[]

Uma matriz que é uma cópia da parte da entrada que é transformada em hash.An array that is a copy of the part of the input that is hashed.

Implementações

Exceções

inputCount usa um valor inválido.inputCount uses an invalid value.

- ou --or- inputBuffer tem um tamanho inválido de deslocamento.inputBuffer has an invalid offset length.

inputOffset está fora do intervalo.inputOffset is out of range. Esse parâmetro requer um número não negativo.This parameter requires a non-negative number.

O objeto já foi descartado.The object has already been disposed.

Exemplos

O código a seguir exemplos de uso de TransformFinalBlock método com o TransformBlock método para uma cadeia de caracteres de hash.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
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

Comentários

Você deve chamar o TransformFinalBlock método depois de chamar o TransformBlock método, mas antes de recuperar o valor de hash final.You must call the TransformFinalBlock method after calling the TransformBlock method but before you retrieve the final hash value.

Observe que o valor de retorno desse método não é o valor de hash, mas apenas uma cópia da parte de hash dos dados de entrada.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. Para recuperar o último valor com hash após a chamada a TransformFinalBlock obter a matriz de bytes contida em um método, o Hash propriedade.To retrieve the final hashed value after calling the TransformFinalBlock method, get the byte array contained in the Hash property.

Aplica-se a