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

Definicja

Oblicza wartość skrótu dla określonego regionu tablicy bajtów wejściowych i kopiuje określony region tablicy bajtów wejściowych do określonego regionu tablicy bajtów wyjściowych.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

Parametry

inputBuffer
Byte[]

Dane wejściowe do obliczenia kodu skrótu dla.The input to compute the hash code for.

inputOffset
Int32

Przesunięcie do tablicy bajtów wejściowych, z której ma zacząć korzystać z danych.The offset into the input byte array from which to begin using data.

inputCount
Int32

Liczba bajtów w tablicy bajtów wejściowych do użycia jako dane.The number of bytes in the input byte array to use as data.

outputBuffer
Byte[]

Kopia części tablicy wejściowej służąca do obliczania kodu skrótu.A copy of the part of the input array used to compute the hash code.

outputOffset
Int32

Przesunięcie do tablicy bajtów wyjściowych, z której mają zostać rozpoczęte zapisywanie danych.The offset into the output byte array from which to begin writing data.

Zwraca

Liczba zapisanych bajtów.The number of bytes written.

Implementuje

Wyjątki

inputCountużywa nieprawidłowej wartości.inputCount uses an invalid value.

—lub—-or- inputBufferma nieprawidłową długość.inputBuffer has an invalid length.

inputBufferjest null.inputBuffer is null.

inputOffsetjest poza zakresem.inputOffset is out of range. Ten parametr wymaga liczby nieujemnej.This parameter requires a non-negative number.

Obiekt został już usunięty.The object has already been disposed.

Przykłady

Poniższy przykład kodu używa TransformFinalBlock metody TransformBlock z metodą do mieszania ciągu.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

Uwagi

Należy wywołać TransformBlock metodę przed TransformFinalBlock wywołaniem metody.You must call the TransformBlock method before calling the TransformFinalBlock method. Przed pobraniem końcowej wartości skrótu należy wywołać obie metody.You must call both methods before you retrieve the final hash value.

Aby pobrać końcową wartość skrótu po wywołaniu TransformFinalBlock metody, Pobierz tablicę bajtową znajdującą się Hash we właściwości.To retrieve the final hash value after calling the TransformFinalBlock method, get the byte array contained within the Hash property.

Wywołanie metody z różnymi tablicami wejściowymi i wyjściowymi skutkuje IOExceptionwynikiem. TransformBlockCalling the TransformBlock method with different input and output arrays results in an IOException.

Dotyczy