MaskGenerationMethod 类

定义

表示所有掩码生成器算法均必须从中派生的抽象类。

C#
public abstract class MaskGenerationMethod
C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public abstract class MaskGenerationMethod
C#
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class MaskGenerationMethod
继承
MaskGenerationMethod
派生
属性

示例

下面的代码示例演示如何从 MaskGenerationMethod 类派生。

C#
using System;
using System.Security.Cryptography;

namespace Contoso
{
    class MaskGenerator : System.Security.Cryptography.MaskGenerationMethod
    {
        private String HashNameValue;

        // Initialize a mask to encrypt using the SHA256 algorithm.
        public MaskGenerator() 
        {
            HashNameValue = "SHA256";
        }

        // 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.

注解

用于密钥交换算法(例如最佳非对称加密填充 (OAEP) )中的计算掩码派生类 MaskGenerationMethod

此类仅由密钥交换算法的实现用于掩码生成。 应用程序代码不直接使用此类。

构造函数

MaskGenerationMethod()

初始化 MaskGenerationMethod 类的新实例。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GenerateMask(Byte[], Int32)

当在派生类中重写时,使用指定的随机种子生成将具有指定长度的掩码。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1