HMACSHA512 Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Berekent een HMAC (Hash-based Message Authentication Code) met behulp van de SHA512 hash-functie.
public ref class HMACSHA512 : System::Security::Cryptography::HMAC
[System.Runtime.InteropServices.ComVisible(true)]
public class HMACSHA512 : System.Security.Cryptography.HMAC
public class HMACSHA512 : System.Security.Cryptography.HMAC
[<System.Runtime.InteropServices.ComVisible(true)>]
type HMACSHA512 = class
inherit HMAC
type HMACSHA512 = class
inherit HMAC
Public Class HMACSHA512
Inherits HMAC
- Overname
- Kenmerken
Voorbeelden
In het volgende voorbeeld ziet u hoe u een bestand ondertekent met behulp van het HMACSHA512 object en hoe u het bestand controleert.
using System;
using System.IO;
using System.Security.Cryptography;
public class HMACSHA512example
{
public static void Main(string[] Fileargs)
{
string dataFile;
string signedFile;
//If no file names are specified, create them.
if (Fileargs.Length < 2)
{
dataFile = @"text.txt";
signedFile = "signedFile.enc";
if (!File.Exists(dataFile))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(dataFile))
{
sw.WriteLine("Here is a message to sign");
}
}
}
else
{
dataFile = Fileargs[0];
signedFile = Fileargs[1];
}
try
{
// Create a random key using a random number generator. This would be the
// secret key shared by sender and receiver.
byte[] secretkey = new Byte[64];
using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
{
// The array is now filled with cryptographically strong random bytes.
rng.GetBytes(secretkey);
// Use the secret key to sign the message file.
SignFile(secretkey, dataFile, signedFile);
// Verify the signed file
VerifyFile(secretkey, signedFile);
}
}
catch (IOException e)
{
Console.WriteLine("Error: File not found", e);
}
} //end main
// Computes a keyed hash for a source file and creates a target file with the keyed hash
// prepended to the contents of the source file.
public static void SignFile(byte[] key, String sourceFile, String destFile)
{
// Initialize the keyed hash object.
using (HMACSHA512 hmac = new HMACSHA512(key))
{
using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
{
using (FileStream outStream = new FileStream(destFile, FileMode.Create))
{
// Compute the hash of the input file.
byte[] hashValue = hmac.ComputeHash(inStream);
// Reset inStream to the beginning of the file.
inStream.Position = 0;
// Write the computed hash value to the output file.
outStream.Write(hashValue, 0, hashValue.Length);
// Copy the contents of the sourceFile to the destFile.
int bytesRead;
// read 1K at a time
byte[] buffer = new byte[1024];
do
{
// Read from the wrapping CryptoStream.
bytesRead = inStream.Read(buffer, 0, 1024);
outStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
}
}
return;
} // end SignFile
// Compares the key in the source file with a new key created for the data portion of the file. If the keys
// compare the data has not been tampered with.
public static bool VerifyFile(byte[] key, String sourceFile)
{
bool err = false;
// Initialize the keyed hash object.
using (HMACSHA512 hmac = new HMACSHA512(key))
{
// Create an array to hold the keyed hash value read from the file.
byte[] storedHash = new byte[hmac.HashSize / 8];
// Create a FileStream for the source file.
using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
{
// Read in the storedHash.
inStream.Read(storedHash, 0, storedHash.Length);
// Compute the hash of the remaining contents of the file.
// The stream is properly positioned at the beginning of the content,
// immediately after the stored hash value.
byte[] computedHash = hmac.ComputeHash(inStream);
// compare the computed hash with the stored value
for (int i = 0; i < storedHash.Length; i++)
{
if (computedHash[i] != storedHash[i])
{
err = true;
}
}
}
}
if (err)
{
Console.WriteLine("Hash values differ! Signed file has been tampered with!");
return false;
}
else
{
Console.WriteLine("Hash values agree -- no tampering occurred.");
return true;
}
} //end VerifyFile
} //end class
Imports System.IO
Imports System.Security.Cryptography
Public Class HMACSHA5126example
Public Shared Sub Main(ByVal Fileargs() As String)
Dim dataFile As String
Dim signedFile As String
'If no file names are specified, create them.
If Fileargs.Length < 2 Then
dataFile = "text.txt"
signedFile = "signedFile.enc"
If Not File.Exists(dataFile) Then
' Create a file to write to.
Using sw As StreamWriter = File.CreateText(dataFile)
sw.WriteLine("Here is a message to sign")
End Using
End If
Else
dataFile = Fileargs(0)
signedFile = Fileargs(1)
End If
Try
' Create a random key using a random number generator. This would be the
' secret key shared by sender and receiver.
Dim secretkey() As Byte = New [Byte](63) {}
Using rng As RandomNumberGenerator = RandomNumberGenerator.Create()
' The array is now filled with cryptographically strong random bytes.
rng.GetBytes(secretkey)
' Use the secret key to encode the message file.
SignFile(secretkey, dataFile, signedFile)
' Take the encoded file and decode
VerifyFile(secretkey, signedFile)
End Using
Catch e As IOException
Console.WriteLine("Error: File not found", e)
End Try
End Sub
' Computes a keyed hash for a source file and creates a target file with the keyed hash
' prepended to the contents of the source file.
Public Shared Sub SignFile(ByVal key() As Byte, ByVal sourceFile As String, ByVal destFile As String)
' Initialize the keyed hash object.
Using myhmac As New HMACSHA512(key)
Using inStream As New FileStream(sourceFile, FileMode.Open)
Using outStream As New FileStream(destFile, FileMode.Create)
' Compute the hash of the input file.
Dim hashValue As Byte() = myhmac.ComputeHash(inStream)
' Reset inStream to the beginning of the file.
inStream.Position = 0
' Write the computed hash value to the output file.
outStream.Write(hashValue, 0, hashValue.Length)
' Copy the contents of the sourceFile to the destFile.
Dim bytesRead As Integer
' read 1K at a time
Dim buffer(1023) As Byte
Do
' Read from the wrapping CryptoStream.
bytesRead = inStream.Read(buffer, 0, 1024)
outStream.Write(buffer, 0, bytesRead)
Loop While bytesRead > 0
End Using
End Using
End Using
Return
End Sub
' end SignFile
' Compares the key in the source file with a new key created for the data portion of the file. If the keys
' compare the data has not been tampered with.
Public Shared Function VerifyFile(ByVal key() As Byte, ByVal sourceFile As String) As Boolean
Dim err As Boolean = False
' Initialize the keyed hash object.
Using hmac As New HMACSHA512(key)
' Create an array to hold the keyed hash value read from the file.
Dim storedHash(hmac.HashSize / 8 - 1) As Byte
' Create a FileStream for the source file.
Using inStream As New FileStream(sourceFile, FileMode.Open)
' Read in the storedHash.
inStream.Read(storedHash, 0, storedHash.Length - 1)
' Compute the hash of the remaining contents of the file.
' The stream is properly positioned at the beginning of the content,
' immediately after the stored hash value.
Dim computedHash As Byte() = hmac.ComputeHash(inStream)
' compare the computed hash with the stored value
Dim i As Integer
For i = 0 To storedHash.Length - 2
If computedHash(i) <> storedHash(i) Then
err = True
End If
Next i
End Using
End Using
If err Then
Console.WriteLine("Hash values differ! Signed file has been tampered with!")
Return False
Else
Console.WriteLine("Hash values agree -- no tampering occurred.")
Return True
End If
End Function 'VerifyFile
End Class
'end class
Opmerkingen
HMACSHA512 is een type sleutel-hash-algoritme dat is samengesteld uit de HASH-functie SHA-512 en wordt gebruikt als HMAC (Hash-based Message Authentication Code). Het HMAC-proces combineert een geheime sleutel met de berichtgegevens en hashes het resultaat. De hashwaarde wordt opnieuw gemengd met de geheime sleutel en vervolgens een tweede keer gehasht. De uitvoer-hash is 512 bits lang.
Een HMAC kan worden gebruikt om te bepalen of een bericht dat via een niet-beveiligd kanaal is verzonden, is gemanipuleerd, mits de afzender en ontvanger een geheime sleutel delen. De afzender berekent de hashwaarde voor de oorspronkelijke gegevens en verzendt zowel de oorspronkelijke gegevens als de hashwaarde als één bericht. De ontvanger berekent de hashwaarde van het ontvangen bericht opnieuw en controleert of de berekende HMAC overeenkomt met de verzonden HMAC.
Als de oorspronkelijke en berekende hashwaarden overeenkomen, wordt het bericht geverifieerd. Als ze niet overeenkomen, zijn de gegevens of de hashwaarde gewijzigd. HMAC's bieden beveiliging tegen manipulatie omdat kennis van de geheime sleutel is vereist om het bericht te wijzigen en de juiste hash-waarde te reproduceren.
HMACSHA512 accepteert sleutels van elke grootte en produceert een hashreeks van 512 bits.
Constructors
| Name | Description |
|---|---|
| HMACSHA512() |
Initialiseert een nieuw exemplaar van de HMACSHA512 klasse met een willekeurig gegenereerde sleutel. |
| HMACSHA512(Byte[]) |
Initialiseert een nieuw exemplaar van de HMACSHA512 klasse met de opgegeven sleutelgegevens. |
Velden
| Name | Description |
|---|---|
| HashSizeValue |
Vertegenwoordigt de grootte, in bits, van de berekende hash-code. (Overgenomen van HashAlgorithm) |
| HashValue |
Vertegenwoordigt de waarde van de berekende hash-code. (Overgenomen van HashAlgorithm) |
| KeyValue |
De sleutel die moet worden gebruikt in het hash-algoritme. (Overgenomen van KeyedHashAlgorithm) |
| State |
Vertegenwoordigt de status van de hash-berekening. (Overgenomen van HashAlgorithm) |
Eigenschappen
| Name | Description |
|---|---|
| BlockSizeValue |
Hiermee wordt de blokgrootte opgehaald of ingesteld voor gebruik in de hash-waarde. (Overgenomen van HMAC) |
| CanReuseTransform |
Hiermee wordt een waarde opgehaald die aangeeft of de huidige transformatie opnieuw kan worden gebruikt. (Overgenomen van HashAlgorithm) |
| CanTransformMultipleBlocks |
Wanneer deze wordt overschreven in een afgeleide klasse, krijgt u een waarde die aangeeft of meerdere blokken kunnen worden getransformeerd. (Overgenomen van HashAlgorithm) |
| Hash |
Hiermee haalt u de waarde op van de berekende hash-code. (Overgenomen van HashAlgorithm) |
| HashName |
Hiermee haalt u de naam op van het hash-algoritme dat moet worden gebruikt voor hashing. (Overgenomen van HMAC) |
| HashSize |
Hiermee wordt de grootte, in bits, van de berekende HMAC opgehaald. |
| HashSize |
Hiermee haalt u de grootte, in bits, van de berekende hash-code op. (Overgenomen van HashAlgorithm) |
| InputBlockSize |
Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de grootte van het invoerblok op. (Overgenomen van HashAlgorithm) |
| Key |
Hiermee haalt u de sleutel op die moet worden gebruikt in de HMAC-berekening. |
| Key |
Hiermee haalt u de sleutel op die moet worden gebruikt in de HMAC-berekening. (Overgenomen van HMAC) |
| OutputBlockSize |
Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de grootte van het uitvoerblok op. (Overgenomen van HashAlgorithm) |
| ProduceLegacyHmacValues |
Biedt een tijdelijke oplossing voor de .NET Framework 2.0-implementatie van het algoritme HMACSHA512, wat niet overeenkomt met de .NET Framework 2.0 Service Pack 1-implementatie. |
Methoden
| Name | Description |
|---|---|
| Clear() |
Alle resources die door de HashAlgorithm klasse worden gebruikt, worden vrijgegeven. (Overgenomen van HashAlgorithm) |
| ComputeHash(Byte[], Int32, Int32) |
Berekent de hashwaarde voor de opgegeven regio van de opgegeven bytematrix. (Overgenomen van HashAlgorithm) |
| ComputeHash(Byte[]) |
Berekent de hashwaarde voor de opgegeven bytematrix. (Overgenomen van HashAlgorithm) |
| ComputeHash(Stream) |
Berekent de hashwaarde voor het opgegeven Stream object. (Overgenomen van HashAlgorithm) |
| Dispose() |
Alle resources die door het huidige exemplaar van de HashAlgorithm klasse worden gebruikt, worden vrijgegeven. (Overgenomen van HashAlgorithm) |
| Dispose(Boolean) |
Publiceert de niet-beheerde resources die worden gebruikt door de HMACSHA512 beheerde resources en brengt eventueel de beheerde resources vrij. |
| Dispose(Boolean) |
Publiceert de niet-beheerde resources die door de HMAC klasse worden gebruikt wanneer een sleutelwijziging legitiem is en optioneel de beheerde resources vrijgeeft. (Overgenomen van HMAC) |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| HashCore(Byte[], Int32, Int32) |
Routeert gegevens die naar het object zijn geschreven in het HMAC-algoritme voor het berekenen van de HMAC. |
| HashCore(Byte[], Int32, Int32) |
Wanneer deze worden overschreven in een afgeleide klasse, worden gegevens die naar het object zijn geschreven, gerouteerd naar het HMAC-algoritme om de HMAC-waarde te berekenen. (Overgenomen van HMAC) |
| HashCore(ReadOnlySpan<Byte>) |
Routeert gegevens die naar het object zijn geschreven in het HMAC-algoritme voor het berekenen van de HMAC. |
| HashFinal() |
Hiermee voltooit u de HMAC-berekening nadat de laatste gegevens door het algoritme zijn verwerkt. |
| HashFinal() |
Wanneer deze wordt overschreven in een afgeleide klasse, voltooit u de HMAC-berekening nadat de laatste gegevens door het algoritme zijn verwerkt. (Overgenomen van HMAC) |
| Initialize() |
Hiermee stelt u het hash-algoritme opnieuw in op de oorspronkelijke status. |
| Initialize() |
Initialiseert een exemplaar van de standaard implementatie van HMAC. (Overgenomen van HMAC) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
| TransformBlock(Byte[], Int32, Int32, Byte[], Int32) |
Berekent de hashwaarde voor de opgegeven regio van de invoer bytematrix en kopieert de opgegeven regio van de invoer bytematrix naar de opgegeven regio van de uitvoer-bytematrix. (Overgenomen van HashAlgorithm) |
| TransformFinalBlock(Byte[], Int32, Int32) |
Berekent de hashwaarde voor de opgegeven regio van de opgegeven bytematrix. (Overgenomen van HashAlgorithm) |
| TryComputeHash(ReadOnlySpan<Byte>, Span<Byte>, Int32) |
Hiermee wordt geprobeerd de hash-waarde voor de opgegeven bytematrix te berekenen. (Overgenomen van HashAlgorithm) |
| TryHashFinal(Span<Byte>, Int32) |
Pogingen om de HMAC-berekening te voltooien nadat de laatste gegevens zijn verwerkt door het HMAC-algoritme. |
Expliciete interface-implementaties
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Publiceert de niet-beheerde resources die worden gebruikt door de HashAlgorithm beheerde resources en brengt eventueel de beheerde resources vrij. (Overgenomen van HashAlgorithm) |