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

Définition

Calcule la valeur de hachage pour la région spécifiée du tableau d'octets d'entrée et copie la région spécifiée du tableau d'octets d'entrée dans la région spécifiée du tableau d'octets de sortie.Computes the hash value for the specified region of the input byte array and copies the specified region of the input byte array to the specified region of the output byte array.

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

Paramètres

inputBuffer
Byte[]

Entrée pour laquelle le code de hachage doit être calculé.The input to compute the hash code for.

inputOffset
Int32 Int32 Int32 Int32

Offset dans le tableau d'octets d'entrée à partir duquel l'utilisation des données commence.The offset into the input byte array from which to begin using data.

inputCount
Int32 Int32 Int32 Int32

Nombre d'octets dans le tableau d'octets d'entrée à utiliser comme données.The number of bytes in the input byte array to use as data.

outputBuffer
Byte[]

Copie de la partie du tableau d'entrée utilisée pour calculer le code de hachage.A copy of the part of the input array used to compute the hash code.

outputOffset
Int32 Int32 Int32 Int32

Offset dans le tableau d'octets de sortie à partir duquel l'écriture des données commence.The offset into the output byte array from which to begin writing data.

Retours

Nombre d'octets écrits.The number of bytes written.

Implémente

Exceptions

inputCount utilise une valeur non valide.inputCount uses an invalid value.

ou-or- inputBuffer a une longueur non valide.inputBuffer has an invalid length.

inputOffset est hors limites.inputOffset is out of range. Ce paramètre requiert un nombre non négatif.This parameter requires a non-negative number.

L'objet a déjà été supprimé.The object has already been disposed.

Exemples

Les exemples de code suivants utilisent TransformFinalBlock la méthode avec TransformBlock la méthode pour hacher une chaîne.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

Remarques

Vous devez appeler la TransformBlock méthode avant d’appeler TransformFinalBlock la méthode.You must call the TransformBlock method before calling the TransformFinalBlock method. Vous devez appeler les deux méthodes avant de récupérer la valeur de hachage finale.You must call both methods before you retrieve the final hash value.

Pour récupérer la valeur de hachage finale après avoir TransformFinalBlock appelé la méthode, récupérez le tableau d' Hash octets contenu dans la propriété.To retrieve the final hash value after calling the TransformFinalBlock method, get the byte array contained within the Hash property.

L’appel TransformBlock de la méthode avec des tableaux d’entrée et de sortie IOExceptiondifférents produit un.Calling the TransformBlock method with different input and output arrays results in an IOException.

S’applique à