Aracılığıyla paylaş


Özel Bir Şifreleme Algoritması Belirtme

WCF, verileri şifrelerken veya dijital imzaları işlem yaparken kullanılacak özel bir şifreleme algoritması belirtmenize olanak tanır. Bu işlem aşağıdaki adımlarla gerçekleştirilir:

  1. Öğesinden bir sınıf türet SecurityAlgorithmSuite

  2. Algoritmayı kaydetme

  3. Bağlamayı -derived sınıfıyla SecurityAlgorithmSuiteyapılandırın.

SecurityAlgorithmSuite öğesinden sınıf türet

SecurityAlgorithmSuite, güvenlikle ilgili çeşitli işlemler gerçekleştirirken kullanılacak algoritmayı belirtmenize olanak tanıyan soyut bir temel sınıftır. Örneğin, dijital imza için karma hesaplama veya iletiyi şifreleme. Aşağıdaki kod, öğesinden SecurityAlgorithmSuitebir sınıfın nasıl türetilmiş olduğunu gösterir:

public class MyCustomAlgorithmSuite : SecurityAlgorithmSuite
    {
        public override string DefaultAsymmetricKeyWrapAlgorithm
        {
            get { return SecurityAlgorithms.RsaOaepKeyWrap; }
        }

        public override string DefaultAsymmetricSignatureAlgorithm
        {
            get { return SecurityAlgorithms.RsaSha1Signature; }
        }

        public override string DefaultCanonicalizationAlgorithm
        {
            get { return SecurityAlgorithms.ExclusiveC14n; ; }
        }

        public override string DefaultDigestAlgorithm
        {
            get { return SecurityAlgorithms.MyCustomHashAlgorithm; }
        }

        public override string DefaultEncryptionAlgorithm
        {
            get { return SecurityAlgorithms.Aes128Encryption; }
        }

        public override int DefaultEncryptionKeyDerivationLength
        {
            get { return 128; }
        }

        public override int DefaultSignatureKeyDerivationLength
        {
            get { return 128; }
        }

        public override int DefaultSymmetricKeyLength
        {
            get { return 128; }
        }

        public override string DefaultSymmetricKeyWrapAlgorithm
        {
            get { return SecurityAlgorithms.Aes128Encryption; }
        }

        public override string DefaultSymmetricSignatureAlgorithm
        {
            get { return SecurityAlgorithms.HmacSha1Signature; }
        }

        public override bool IsAsymmetricKeyLengthSupported(int length)
        {
            return length >= 1024 && length <= 4096;
        }

        public override bool IsSymmetricKeyLengthSupported(int length)
        {
            return length >= 128 && length <= 256;
        }
    }

Özel Algoritmayı Kaydetme

Kayıt bir yapılandırma dosyasında veya kesinlik temelli kodda yapılabilir. Özel algoritma kaydetme işlemi, bir şifreleme hizmeti sağlayıcısı ve diğer ad uygulayan bir sınıf arasında eşleme oluşturularak gerçekleştirilir. Diğer ad daha sonra WCF hizmetinin bağlamasında algoritma belirtilirken kullanılan bir URI'ye eşlenir. Aşağıdaki yapılandırma parçacığında özel algoritmanın yapılandırmaya nasıl kaydedilecekleri gösterilmektedir:

<configuration>
   <mscorlib>
      <cryptographySettings>
         <cryptoNameMapping>
           <cryptoClasses>
              <cryptoClass SHA256CSP="System.Security.Cryptography.SHA256CryptoServiceProvider, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
           </cryptoClasses>
           <nameEntry name="http://contoso.com/CustomAlgorithms/CustomHashAlgorithm"
              class="SHA256CSP" />
           </cryptoNameMapping>
        </cryptographySettings>
    </mscorlib>
</configuration>

öğesinin <cryptoClasses> altındaki bölüm, SHA256CryptoServiceProvider ile "SHA256CSP" diğer adı arasındaki eşlemeyi oluşturur. öğesi , <nameEntry> "SHA256CSP" diğer adı ile belirtilen URL http://contoso.com/CustomAlgorithms/CustomHashAlgorithmarasında eşlemeyi oluşturur.

Özel algoritmayı koda kaydetmek için yöntemini kullanın AddAlgorithm(Type, String[]) . Bu yöntem her iki eşlemeyi de oluşturur. Aşağıdaki örnekte bu yöntemin nasıl çağrılacakları gösterilmektedir:

// Register the custom URI string defined for the hashAlgorithm in MyCustomAlgorithmSuite class to create the
// SHA256CryptoServiceProvider hash algorithm object.
CryptoConfig.AddAlgorithm(typeof(SHA256CryptoServiceProvider), "http://contoso.com/CustomAlgorithms/CustomHashAlgorithm");

Bağlamayı Yapılandırma

Bağlama ayarlarında aşağıdaki kod parçacığında gösterildiği gibi özel SecurityAlgorithmSuitetüretilmiş sınıfı belirterek bağlamayı yapılandırabilirsiniz:

WSHttpBinding binding = new WSHttpBinding();
            binding.Security.Message.AlgorithmSuite = new MyCustomAlgorithmSuite();

Eksiksiz bir kod örneği için WCF Güvenliğinde Şifreleme Çevikliği örneğine bakın.

Ayrıca bkz.