Validating Data Integrity with Hashes:
Hashes can
be used to generate code that cross pond to specific data or file. But you
can’t reproduce data from the hash. All hash algorithms inherit from System.Security.Cryptography.HashAlgorithms. These
algorithms include:
MD5
|
Represents the abstract class from which all
implementations of the MD5 hash algorithm inherit.
HashSize =128
|
RIPEMD160
|
Represents the abstract class from which all
implementations of the MD160 hash algorithm inherit.
HashSize=128
|
SHA1
|
HashSize = 160 bits
|
SHA256
|
HashSize = 256 bits
|
SHA384
|
HashSize = 384 bits
|
SHA512
|
HashSize = 512 bits
|
Keyed Hash Algorithms:
All
Keyed Hash Algorithms inherit from System.Security.Cryptography.KeyedHashAlgorithm
which in turn inherits from HashAlgorithm. These
Algorithms include:
HMACSHA1: Both sender and receiver
share the same secret key. It uses SHA1 to produce hash of length 20 bytes. It
accepts key of all sizes.
MACTripleDES: Uses TripleDES to
produce a hash of 8 bytes. It accepts key of size 8, 16, or 24 bytes.
Computing a Non-Keyed hash:
byte[] data = new byte[DATA_SIZE];
MD5 md5 = new
MD5CryptoServiceProvider();
byte[] result =
md5.ComputeHash(data);
Computing a Keyed Hash:
HMACSHA1 myhmacsha1 = new HMACSHA1(
key );
FileStream inStream = new
FileStream(sourceFile, FileMode.Open);
byte[] hashValue =
myhmacsha1.ComputeHash(inStream);
myhmacsha1.Clear();
inStream.Close();
Digitally Signing Files:
Digital signature is a value that is
appended to a file to secure its contents. For this purpose public key is used
that is the part of the signature. The recipient receives and verifies the
signature, before trusting on it. RSACryptoServiceProvider
and DSACryptoServiceProvider are the two
implementations for digitally signing documents. Properties involved in signing
are:
SignData
|
Overloaded. Computes the hash value of the
specified data and signs it.
|
SignHash
|
Computes the signature for the specified
hash value by encrypting it with the private key.
|
ToXmlString
|
Creates and returns an XML string containing
the key of the current RSA object. (Inherited from RSA.)
|
VerifyData
|
Verifies the specified signature data by
comparing it to the signature computed for the specified data.
|
VerifyHash
|
Verifies the specified signature data by
comparing it to the signature computed for the specified hash value.
|
Comments