MaskGenerationMethod Class
.NET Framework 3.0
Represents the abstract class from which all mask generator algorithms must derive.
Namespace: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)
Assembly: mscorlib (in mscorlib.dll)
The following code example demonstrates how to derive from the MaskGenerationMethod class.
using System; using System.Security.Cryptography; namespace Contoso { class MaskGenerator : System.Security.Cryptography.MaskGenerationMethod { private String HashNameValue; // Initialize a mask to encrypt using the SHA1 algorithm. public MaskGenerator() { HashNameValue = "SHA1"; } // Create a mask with the specified seed. override public byte[] GenerateMask(byte[] seed, int maskLength) { HashAlgorithm hash; byte[] rgbCounter = new byte[4]; byte[] targetRgb = new byte[maskLength]; uint counter = 0; for (int inc = 0; inc < targetRgb.Length; ) { ConvertIntToByteArray(counter++, ref rgbCounter); hash = (HashAlgorithm) CryptoConfig.CreateFromName(HashNameValue); byte[] temp = new byte[4 + seed.Length]; Buffer.BlockCopy(rgbCounter, 0, temp, 0, 4); Buffer.BlockCopy(seed, 0, temp, 4, seed.Length); hash.ComputeHash(temp); if (targetRgb.Length - inc > hash.HashSize/8) { Buffer.BlockCopy( hash.Hash, 0, targetRgb, inc, hash.Hash.Length); } else { Buffer.BlockCopy( hash.Hash, 0, targetRgb, inc, targetRgb.Length - inc); } inc += hash.Hash.Length; } return targetRgb; } // Convert the specified integer to the byte array. private void ConvertIntToByteArray( uint sourceInt, ref byte[] targetBytes) { uint remainder; int inc = 0; // Clear the array prior to filling it. Array.Clear(targetBytes, 0, targetBytes.Length); while (sourceInt > 0) { remainder = sourceInt % 256; targetBytes[3 - inc] = (byte) remainder; sourceInt = (sourceInt - remainder)/256; inc++; } } } // This class demonstrates how to create the MaskGenerator class // and call its GenerateMask member. class MaskGeneratorImpl { public static void Main(string[] args) { byte[] seed = new byte[] {0x01, 0x02, 0x03, 0x04}; int length = 16; MaskGenerator maskGenerator = new MaskGenerator(); byte[] mask = maskGenerator.GenerateMask(seed, length); Console.WriteLine("Generated the following mask:"); Console.WriteLine(System.Text.Encoding.ASCII.GetString(mask)); Console.WriteLine("This sample completed successfully; " + "press Enter to exit."); Console.ReadLine(); } } } // // This sample produces the following output: // // Generated the following mask: // ?"TFd(?~OtO? // This sample completed successfully; press Enter to exit.
import System.*;
import System.Security.Cryptography.*;
class MaskGenerator extends System.Security.Cryptography.MaskGenerationMethod
{
private String hashNameValue;
// Initialize a mask to encrypt using the SHA1 algorithm.
public MaskGenerator()
{
hashNameValue = "SHA1";
} //MaskGenerator
// Create a mask with the specified seed.
public ubyte[] GenerateMask(ubyte seed[], int maskLength)
{
HashAlgorithm hash;
ubyte rgbCounter[] = new ubyte[4];
ubyte targetRgb[] = new ubyte[maskLength];
int counter = 0;
for (int inc = 0; inc < targetRgb.get_Length(); ) {
ConvertIntToByteArray(counter++, rgbCounter);
hash = ((HashAlgorithm)CryptoConfig.CreateFromName(hashNameValue));
ubyte temp[] = new ubyte[4 + seed.get_Length()];
Buffer.BlockCopy(rgbCounter, 0, temp, 0, 4);
Buffer.BlockCopy(seed, 0, temp, 4, seed.get_Length());
hash.ComputeHash(temp);
if (targetRgb.get_Length() - inc > hash.get_HashSize() / 8) {
Buffer.BlockCopy(hash.get_Hash(), 0, targetRgb, inc,
hash.get_Hash().get_Length());
}
else {
Buffer.BlockCopy(hash.get_Hash(), 0, targetRgb, inc,
targetRgb.get_Length() - inc);
}
inc += hash.get_Hash().get_Length();
}
return targetRgb;
} //GenerateMask
// Convert the specified integer to the byte array.
private void ConvertIntToByteArray(int sourceInt, ubyte targetBytes[])
{
int remainder;
int inc = 0;
// Clear the array prior to filling it.
Array.Clear(targetBytes, 0, targetBytes.get_Length());
while (sourceInt > 0) {
remainder = sourceInt % 256;
targetBytes.set_Item((3 - inc), (Int32)remainder);
sourceInt = (sourceInt - remainder) / 256;
inc++;
}
} //ConvertIntToByteArray
} //MaskGenerator
// This class demonstrates how to create the MaskGenerator class
// and call its GenerateMask member.
class MaskGeneratorImpl
{
public static void main(String[] args)
{
ubyte seed[] = new ubyte[] { 0x1, 0x2, 0x3, 0x4 };
int length = 16;
MaskGenerator maskGenerator = new MaskGenerator();
ubyte mask[] = maskGenerator.GenerateMask(seed, length);
Console.WriteLine("Generated the following mask:");
Console.WriteLine(System.Text.Encoding.get_ASCII().GetString(mask));
Console.WriteLine("This sample completed successfully; "
+ "press Enter to exit.");
Console.ReadLine();
} //main
} //MaskGeneratorImpl
//
// This sample produces the following output:
//
// Generated the following mask:
// ?"TFd(?~OtO?
// This sample completed successfully; press Enter to exit.
System.Object
System.Security.Cryptography.MaskGenerationMethod
System.Security.Cryptography.PKCS1MaskGenerationMethod
System.Security.Cryptography.MaskGenerationMethod
System.Security.Cryptography.PKCS1MaskGenerationMethod
Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.Community Additions
ADD
Show: