HashAlgorithm.TransformBlock(Byte[], Int32, Int32, Byte[], Int32) 메서드

정의

입력 바이트 배열의 지정된 영역에 대한 해시 값을 계산하여 입력 바이트 배열의 지정된 영역을 출력 바이트 배열의 지정된 영역에 복사합니다.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

매개 변수

inputBuffer
Byte[]

해시 코드를 컴퓨팅할 입력입니다.The input to compute the hash code for.

inputOffset
Int32

데이터 사용을 시작할 입력 바이트 배열의 오프셋입니다.The offset into the input byte array from which to begin using data.

inputCount
Int32

데이터로 사용할 입력 바이트 배열의 바이트 수입니다.The number of bytes in the input byte array to use as data.

outputBuffer
Byte[]

해시 코드를 컴퓨팅하는 데 사용되는 입력 배열의 일부에 대한 복사본입니다.A copy of the part of the input array used to compute the hash code.

outputOffset
Int32

데이터 쓰기를 시작할 출력 바이트 배열의 오프셋입니다.The offset into the output byte array from which to begin writing data.

반환

쓰여진 바이트 수입니다.The number of bytes written.

구현

예외

inputCount에 잘못된 값이 사용된 경우inputCount uses an invalid value.

또는-or- inputBuffer의 길이가 잘못된 경우inputBuffer has an invalid length.

inputBuffernull입니다.inputBuffer is null.

inputOffset이 범위에서 벗어난 경우.inputOffset is out of range. 이 매개 변수에는 0 또는 양의 정수가 필요합니다.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

설명

호출 해야 합니다 TransformBlock 메서드를 호출 하기 전에 TransformFinalBlock 메서드.You must call the TransformBlock method before calling the TransformFinalBlock method. 최종 해시 값을 검색 하기 전에 두 메서드를 호출 해야 합니다.You must call both methods before you retrieve the final hash value.

호출한 후 최종 해시 값을 검색 하는 TransformFinalBlock 메서드 내에 포함 된 바이트 배열을 가져와야는 Hash 속성입니다.To retrieve the final hash value after calling the TransformFinalBlock method, get the byte array contained within the Hash property.

호출 된 TransformBlock 서로 다른 입력 및 출력 배열 메서드는 IOException합니다.Calling the TransformBlock method with different input and output arrays results in an IOException.

적용 대상