Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

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

 

Data di pubblicazione: ottobre 2016

Calcola il valore hash dell'area specifica della matrice di byte di input e copia una determinata area della matrice di byte di input nell'area specifica della matrice di byte di output.

Spazio dei nomi:   System.Security.Cryptography
Assembly:  mscorlib (in mscorlib.dll)

public int TransformBlock(
	byte[] inputBuffer,
	int inputOffset,
	int inputCount,
	byte[] outputBuffer,
	int outputOffset
)

Parametri

inputBuffer
Type: System.Byte[]

Input per il quale calcolare il codice hash.

inputOffset
Type: System.Int32

Offset nella matrice di byte di input dal quale iniziare a usare i dati.

inputCount
Type: System.Int32

Numero di byte nella matrice di byte di input da usare come dati.

outputBuffer
Type: System.Byte[]

Copia della parte della matrice di input usata per calcolare il codice hash.

outputOffset
Type: System.Int32

Offset nella matrice di byte di output dal quale iniziare a scrivere i dati.

Valore restituito

Type: System.Int32

Numero di byte scritti.

Exception Condition
ArgumentException

inputCount utilizza un valore non valido.

-oppure-

inputBuffer ha una lunghezza non valida.

ArgumentNullException

inputBuffer è null.

ArgumentOutOfRangeException

inputOffset non è compreso nell'intervallo consentito. Questo parametro è richiesto un numero non negativo.

ObjectDisposedException

L'oggetto è già stato eliminato.

È necessario chiamare il TransformBlock metodo prima di chiamare il TransformFinalBlock metodo. È necessario chiamare sia metodi prima di recuperare il valore hash finale.

Per recuperare il valore hash finale dopo la chiamata di TransformFinalBlock metodo, ottenere la matrice di byte all'interno di Hash proprietà.

La chiamata di TransformBlock con diverse matrici di input e output i metodi restituiscono un IOException.

Utilizzo di esempi di codice riportato di seguito il TransformFinalBlock metodo con il TransformBlock metodo per l'hashing di una stringa.

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));
	}

}

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: