HashAlgorithm.TransformBlock(Byte[], Int32, Int32, Byte[], Int32) Metoda
Definice
Vypočítá hodnotu hash pro určenou oblast vstupního bajtového pole a zkopíruje určenou oblast vstupního bajtového pole do zadané oblasti výstupního bajtového pole.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[]
Vstup pro výpočet hash kódu pro.The input to compute the hash code for.
- inputOffset
- Int32
Posun do vstupního bajtového pole, ze kterého se mají začít používat dataThe offset into the input byte array from which to begin using data.
- inputCount
- Int32
Počet bajtů ve vstupním poli bajtů, které se mají použít jako dataThe number of bytes in the input byte array to use as data.
- outputBuffer
- Byte[]
Kopie části vstupního pole, která slouží k výpočtu hash kódu.A copy of the part of the input array used to compute the hash code.
- outputOffset
- Int32
Posun do výstupního pole bajtů, ze kterého se mají začít zapisovat data.The offset into the output byte array from which to begin writing data.
Návraty
Počet zapsaných bajtů.The number of bytes written.
Implementuje
Výjimky
inputCount
používá neplatnou hodnotu.inputCount
uses an invalid value.
-nebo--or-
inputBuffer
má neplatnou délku.inputBuffer
has an invalid length.
inputBuffer
je null
.inputBuffer
is null
.
inputOffset
je mimo rozsah.inputOffset
is out of range. Tento parametr vyžaduje jiné než záporné číslo.This parameter requires a non-negative number.
Objekt již byl uvolněn.The object has already been disposed.
Příklady
Následující příklady kódu používají metodu TransformFinalBlock s metodou TransformBlock k vytvoření hodnoty hash řetězce.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
Poznámky
Před voláním metody TransformFinalBlock je nutné volat metodu TransformBlock.You must call the TransformBlock method before calling the TransformFinalBlock method. Obě metody je nutné volat před tím, než bude získána konečná hodnota hash.You must call both methods before you retrieve the final hash value.
Chcete-li načíst konečnou hodnotu hash po volání metody TransformFinalBlock, Získejte pole bajtů obsažené v rámci vlastnosti Hash.To retrieve the final hash value after calling the TransformFinalBlock method, get the byte array contained within the Hash property.
Volání metody TransformBlock s různými vstupními a výstupními poli má za následek IOException.Calling the TransformBlock method with different input and output arrays results in an IOException.