78 lines
1.8 KiB
C#
78 lines
1.8 KiB
C#
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
// ---- Hashing example
|
|
var data = "My Passwort";
|
|
|
|
HashAlgorithm sha = SHA256.Create();
|
|
byte[] result = sha.ComputeHash(Encoding.ASCII.GetBytes(data));
|
|
|
|
foreach(var byt in result)
|
|
{
|
|
Console.Write($"{byt:X}");
|
|
}
|
|
// ----
|
|
|
|
// ---- Signing
|
|
|
|
/*
|
|
Verifying a digital signature is the opposite of signing data.
|
|
Verifying a signature will tell you if the signed data has changed
|
|
or not. When a digital signature is verified, the signature is decrypted
|
|
using the public key to produce the original hash value. The data that was
|
|
signed is hashed. If the two hash values match, then the signature has been
|
|
verified. To do this, write a program.
|
|
|
|
|
|
publicKey kann verschlüssen. Nur der privat key kann aber Entschlüssen.
|
|
|
|
*/
|
|
|
|
|
|
// https://learn.microsoft.com/en-us/dotnet/standard/security/cryptographic-signatures
|
|
using SHA256 alg = SHA256.Create();
|
|
|
|
byte[] data = Encoding.ASCII.GetBytes("Hello, from the .NET Docs!");
|
|
byte[] hash = alg.ComputeHash(data);
|
|
RSAParameters sharedParameters;
|
|
byte[] signedHash;
|
|
|
|
// Generate signature
|
|
using (RSA rsa = RSA.Create())
|
|
{
|
|
sharedParameters = rsa.ExportParameters(false); //Public key
|
|
|
|
RSAPKCS1SignatureFormatter rsaFormatter = new(rsa);
|
|
rsaFormatter.SetHashAlgorithm(nameof(SHA256));
|
|
|
|
signedHash = rsaFormatter.CreateSignature(hash);
|
|
}
|
|
|
|
// Verify signature
|
|
using (RSA rsa = RSA.Create())
|
|
{
|
|
rsa.ImportParameters(sharedParameters); //Public key
|
|
|
|
RSAPKCS1SignatureDeformatter rsaDeformatter = new(rsa);
|
|
rsaDeformatter.SetHashAlgorithm(nameof(SHA256));
|
|
|
|
if (rsaDeformatter.VerifySignature(hash, signedHash))
|
|
{
|
|
Console.WriteLine("The signature is valid.");
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("The signature is not valid.");
|
|
}
|
|
}
|
|
|
|
|
|
// ----
|
|
|
|
|
|
|
|
|